2016-04-14 10 views
2

バッチマシンで別のスクリプトをリモートで実行するbashスクリプトを作成する必要があります。そうするために私はSSHを通してスクリプトを渡しています。'expect'コマンドを使用してリモートでスクリプトを実行するSSHにパスワードを渡す

ssh -p$port [email protected]$ip 'bash -s' < /path/to/script/test.sh 

私はそれが私のRSAキーを使用するだろうと思ったが、私はエラーを取得しています:

"Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)" 

私は無駄にsshpassを使用してみました。だから私の次の解決策は期待を使用していた。私は以前は期待していたことが一度もありません。

ssh -p$port [email protected]$ip 'bash -s' < /path/to/script/test.sh 
/usr/bin/expect <<EOD 
expect "password" 
send "$spass\n" 
send "\n" 
EOD 

私はすべてのマシンにrootアクセス権があり、コードがbash内に残っている限り、ANYソリューションが実行します。これは、親スクリプトから渡されたグローバル変数($ spass、$ ip、$ portなど)をループとして実行されることに注意してください。次の2つの手段で間違ったことをやっている

+1

はマシンのルートの 'の.ssh/authorized_keys'ファイルのそれぞれであなたのSSH公開鍵ですか?私はキーケースを使ってあなたのssh認証をしようとしているときになぜあなたがsmackdownを取得しているのかを理解することが最善のケースシナリオであると思います。 – JNevill

+0

'ssh -v {port} root @ {ip}'で手作業で接続して、何が起こっているのかをより正確に把握することができます。 – Mike

+2

重要な問題を解決することは、パスワードのプロンプトをハッキングすることよりも多くの**良い解決策です。 –

答えて

3

  1. あなたはexpectsshと対話したい場合は、前expectスクリプトからsshを起動しないようにする必要があります。

  2. あなたがsshstdinにスクリプト(/path/to/script/test.sh)を置く場合は、任意のより多くのsshプロセスと通信することはできません。

scpを使用してリモートホストにスクリプトをコピーして実行する必要があります。

は、スクリプトは次のようになります期待:

/usr/bin/expect <<EOF 
spawn ssh -p$port [email protected]$ip 
expect "password" 
send "$Spass\r" 
expect "$ " 
send "/path/to/script/on/remote/server/test.sh\r" 
expect "$ " 
interact 
EOF 
+1

'interact'と' EOF'がありません – dbndhjefj

+0

@szpalありがとう。今修正されました。 – Jakuje

+0

ありがとう、それは確かにトリックでした。それが進む前に他のスクリプトが終了するのを待たせる方法はありますか?私は通常 'ソース'を使用します、それは期待どおりに再生されますか? –

0
#!/usr/bin/expect 
    #Replace with remote username and remote ipaddress 
    spawn /usr/bin/ssh -o StrictHostKeyChecking=no [email protected] 
    #Replace with remote username and remote ipaddress 
    expect "[email protected]'s password: " 
    #Provide remote system password 
    send "urpassword\n" 
    #add commands to be executed. Also possible to execute bash scripts 
    expect "$ " {send "pwd\n"} # bash command 
    expect "$ " {send "cd mytest\n"} 
    expect "$ " {send "./first.sh\n"} # bash scripts 
    expect "$ " {send "exit\n"} 
    interact 
+0

答えの説明を入力してください –

+0

Expectツールは、ssh、telnet、ftp、passwd、fsck、rlogin、tipなどの対話型アプリケーションの自動化に使用できます。 以下のURLからいくつかの例を試してみてください。 http://www.thegeekstuff.com/2010/10/expect-examples –

関連する問題