2016-04-11 17 views
0

Uzak sunucuya bağlanan, başka bir sunucuya (argüman olarak IP) gelen bir pini yazmaya çalışıyorum ve sonucu çıktıyorum.Bash komut dosyası - uzak sunucuya bağlan ve sonuç alın

#!/bin/bash 
# IP as argument 
IP=$1 
# Remote connection 
ssh -p 22 [email protected] 
# Pinging and saving only latency results to RESULT 
RESULT=`ping -i 2 -c 4 $IP | grep icmp_seq | awk '{print $7}' | cut -b 6-12` 
# Outputs the result  
echo $RESULT 

Ama bir hata alıyorum: Yani burada

yazdıklarımı tabii tester.myserver.com Of

Name or service not known name tester.myserver.com 

sadece bir örnek ama elle benim gerçek uzaktan kumanda ile ssh komutu yazarsanız Sunucu adresi işe yarıyor. Bu yüzden bunun neden bir senaryo olarak işe yaramayacağına dair hiçbir fikrim yok.

+0

'ssh' komutunun siz çıkıncaya kadar engelleneceğini biliyorsunuz ve sonra yerel makinede "ping" vb. – Biffen

+0

@Biffen Bash betikleri ve linux komutları yazarken toplam yeni kullanıcıyım. Peki benim senaryomda ne yapmamı/değiştirmemi önerirsiniz? –

+0

İnternet, SSH üzerinden komutların nasıl yürütüleceğine dair örneklerle doludur. Bu yüzden favori arama motorunuza sormanızı öneriyorum. Zaten Q yazdığı gibi – Biffen

cevap

1

bir komut veya komutların listesini göndermek için olağan bir yol üzerinde yürütülecek bir uzak sunucu aşağıdaki gibidir:

ssh [email protected] "<your commands go here>" 

ya sizin durumda:

ssh -p 22 [email protected] "ping -i 2 -c 4 $IP | grep icmp_seq | awk '{print \$7}' | cut -b 6-12" 

Bildirimi "$" kaçmak için 7 $ önce "\". Bu, $ 7'nin ssh komutunu çalıştırdığınızda 7 dolarlık bir yerel değişkene (ki bu da ayarlanabilecek veya ayarlanamayacak), 7 $ 'lı doğru bağlamda diğer komutlarla koruyarak değerlendirilmesini engeller.

Hala olsa çalışmak için $ IP ayarlamak zorunda ve bu yüzden hep birlikte şöyle olacaktır: 7 $ uzaktan sorunu çözülürken

IP = $1 
ssh -p 22 [email protected] "ping -i 2 -c 4 $IP | grep icmp_seq | awk '{print \$7}' | cut -b 6-12" 

Şimdi $ IP

, lokal olarak çözümlenir.

Ben yerel bir değişken bazı komutları çalıştırmak ve kullanmak için bir uzak sunucuya bağlanmaya çalıştığında a similar problem to yours vardı - sadece $ IP ile yapıyorlar gibi.

2
bu şekilde istenilen satırı değiştirin

:

RESULT=`ssh [email protected] "ping -i 2 -c 4 ${IP}" | grep icmp_seq | awk '{print $7}' | cut -b 6-12` 

veya awk olmadan:

RESULT=`ssh [email protected] "ping -i 2 -c 4 ${IP} | grep icmp_seq | sed 's/^.*time=\([0-9.]\+\).*/\1/'"` 

Saygılarımızla Yani