2016-04-11 14 views
0

リモートサーバーに接続し、他のサーバー(IPを引数として)にpingして結果を出力するスクリプトを作成しようとしています。だからここBashスクリプト - リモートサーバーに接続して結果を取得する

は、私が書いたものである:

#!/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 

しかし、私はエラーが取得しています:私は手動で私の本当のリモートでそのsshコマンドを入力する場合はもちろんtester.myserver.com

Name or service not known name tester.myserver.com 

は一例ですが、それが動作するサーバーアドレス。だから、なぜこれがスクリプトとして機能しないのか分かりません。

+0

'ssh'コマンドが終了するまでブロックされ、' ping'などがローカルマシン上で実行されることは知っていますか? – Biffen

+0

@Biffen私は、bashスクリプトとlinuxコマンドの作成に関しては初心者です。だから私のスクリプトで何をやってほしいのですか? –

+0

インターネットには、SSH経由でコマンドを実行する方法の例がたくさんあります。だから私はあなたのお気に入りの検索エンジンを尋ねることをお勧めします。 – Biffen

答えて

1

に実行するコマンドのコマンドまたはリストを送信する通常の方法リモートサーバーは次のようになります。

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

またはあなたの場合:

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

お知らせ "$" をエスケープする$前に7 "\"。これにより、sshコマンドを実行するときに$ 7をローカル変数$ 7(これは設定されているかもしれないし、設定されていないかもしれない)に評価することができなくなり、$ 7を他のコマンドで正しいコンテキストに保つことができます。

あなたはまだそれがが動作するために$ IPを設定する必要があり、そのためすべて一緒に次のようになります:$ 7をリモートで解決されながら

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

今$ IP

は、ローカルで解決されます。

リモートサーバに接続していくつかのコマンドを実行し、ローカル変数を使用しようとしたときに、私はa similar problem to yoursでした。あなたが$ IPを使っているのと同じです。

2
これにご対応する行を変更

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

やawkのなし:だから

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

よろしく

関連する問題