私はsshでパスワードを自動的に入力するという古典的な問題に苦しんでおり、他のみんなと同じように、私は期待に関して暗闇の中でつまずいています。最後に、私はちょっとうまくいくスクリプトをまとめました:
#!/usr/bin/expect -f
# command line args
set user_at_host [lrange $argv 0 0]
set password [lrange $argv 1 1]
set timeout 1
# ssh command
spawn ssh -S ~/.ssh/tmp.$user_at_host -M -N -f $user_at_host
# deal with ssh prompts
expect {
"*yes/no*" { send "yes\r" ; exp_continue }
"*assword:" { send "$password\r" ; exp_continue }
}
このスクリプトは、行のおかげで終了します。timeout 1
行がないと、単にハングし、ユーザーの操作()によってのみ終了します^C
。
行が単純なsshコマンドの場合spawn
、スクリプトはすぐに終了しましたが、これは単純なsshではありません。異なる可能性があるのは-f
、バックグラウンドで実行するオプションです(ただし、スクリプトを使用せずに試してみましたが、役に立ちませんでした)。
私はそれを読んだinteract
かexpect eof
、役立つかもしれませんが、実際にそれを行う正しい呪文を見つけることができませんでした。
私の質問(私は思う)は、バックグラウンドプロセスを生成するexpectスクリプトを、タイムアウトなしで終了させる方法ですか?
編集:「パスワードなしのssh認証を使用する」という答えを期待する必要がありました(しゃれは意図していません)。これは適切なアドバイスですが、私のシナリオでは適切な解決策ではありません。信頼できる環境でバニラがインストールされたシステムを自動テストします。信頼できるキーをイメージに追加することは望ましくない/不可能です。