2011-12-05 7 views
0

私は世界的なスクリプト作成者です。私は、リモートサーバ上のローカルシェルスクリプトをexpectスクリプトを使って実行しているときに問題が発生しています。 CMDがdf -kh;topのような基本的なコマンドである場合、それが正常に動作している予想スクリプトを使用してリモートサーバー上にローカルシェルスクリプトを実行します(リモートサーバーにコピーしないで)

VAR=$(/home/local/RD/expect5.45/expect -c " 
spawn -noecho ssh -q -o StrictHostKeyChecking=no [email protected]$HOST $CMD 
match_max 100000 
expect \"*?assword:*\" 
send -- \"$PASS\r\" 
send -- \"\r\" 
send \"exit\n\r\" 
expect eof 
") 

私のスクリプトは以下の通りです。 しかし、シェルスクリプトを作成したリモートサーバ上にいくつかの統計情報を収集する必要があります。 私は運

spawn -noecho ssh -q -o StrictHostKeyChecking=no [email protected]$HOST 'bash -s' < localscript.sh 

選んで、リモートサーバー上localscriptを実行するために、そのことができないと、次の試してみました。 この問題の解決にお手伝いください。

答えて

0

前回私がこのようなことを試したときに、すぐにexpect(1)を使って疲れてしまい、パスワードプロンプトに正しく応答しようとしました。私は最終的に自動化することが容易なキーベースのログインを作成する方法にcreate an ssh keycopy the key to the remote system、そしてset up the ssh-agent学ぶために10分を過ごしたとき、私はトラブルをリモートスクリプトを実行していたことはありません:

ssh remotehost "commands ; go ; here" 

まず、あなたが作成する必要があるかどうかを確認すでにアカウントをお持ちの場合は鍵がか:リストされたファイルがない場合

ls -l ~/.ssh/id_* 

は、その後、実行します。

ssh-keygen 

dプロンプトに答えます。

あなたの鍵が生成されるとは、リモートシステムにコピーします:

ssh-copy-id remote 

は、最近のほとんどのシステムが起動し、デスクトップの一部としてssh-agent(1)を実行します。あなたは、エージェントがすでに始まっ持っているかどうかを判断するために、実行します。

ssh-add -l 

をあなたが表示された場合、あなたが行ってもいいです「エージェントは何のアイデンティティを持っていません。」。 「認証エージェントへの接続を開けませんでした」と表示された場合あなたの環境にssh-agent(1)を挿入する最適な場所についていくつかの調査を行う必要があります。エージェントを完全に退かせても、それは単なる便利なことです。それはしばらくの間のみ有効ですので

は、おそらくタイムアウトで、あなたのキーを追加します。

ssh-add -t 3600 

は今それをテスト:

ssh remote "df -hk ; ps auxw ; ip route show ; free -m" 

expect(1)は間違いなくきちんとしたツールですが、認証にリモートシステムはSSHキーで簡単に(より安全に)実行できます。

+0

Tnxはすばやい応答です。 ssh-keyには関係しません。 "ssh -q -o StrictHostKeyChecking = no $ USER @ $ HOST" bash -s ' peeyushs

+0

Hrm。コマンドを 'ssh'コマンドのパラメータとして実行する場合、' expect(1) 'スクリプトで' exit'を送る必要はありません。 – sarnold

+0

sendを削除しても動作しません。私はこのような何かを試してみるssh user @ remoteserver "リモートサーバで実行するローカルスクリプト"。同じことをするために他の方法がありますか? – peeyushs

関連する問題