SSH üzerinden uzaktan döngü


14

Bir senaryoda aşağıdakiler var

for server in ${servers[@]}; do
    echo ${server}
    ssh user@${server} "for i in /tmp/foo* ; do echo ${i}; done"
done

Ama işe yaramıyor. Garip bir şey, $ I miktarına dönüş çizgileri görüyorum. Eğer on dosyam varsa on tane boş satır görüyorum.


da bakmayı GNU paralel en --sshlogin seçeneğiyle.
Sebastian

Yanıtlar:


20

Yerel kabuğunuz ${i}çift ​​tırnak içinde ( ") yorumlanır, böylece komut

ssh user@some.serv.er "for i in /tmp/foo* ; do echo; done"

'Bunun yerine tek tırnak işareti ( ) kullanın, sorununuz ortadan kalkacaktır:

ssh user@${server} 'for i in /tmp/foo* ; do echo $i; done'

2

Sadece bu sorunu biraz geri koştu ve verilen çözüm, yerel kabuktan değişkenleri de çekiyorsanız, işe yaramazken çok etkili değildir, ssh'den önce tekrarlamak için bir dizi oluşturursunuz. Biraz karışıklık başlangıçta sadece $ kaçmak olurdu, bu yüzden olurdu

"for i in /tmp/foo* ; do echo \${i}; done"

Hangi ssh kabuk denilen değil, yerel yapı içinde kaçmak.


0

Listedeki bağlantı noktalarını da almak için yukarıdaki cevabı güncelledim.

for i in {10.21.xxx.yyy,10.21.xxx.yyy,10.23.xxx.yyy};
do
        for j in {5501,5502,5503,5504,7701,7702,7703,7704,5551,5552,5553,7771,7772,7773};
        do
                (echo > /dev/tcp/${i}/${j}) > /dev/null 2>&1 && echo "${i}:${j} :: it's getting connected" || echo "${i}:${j} :: it's not connecting"
        done
done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.