シェルスクリプトでexpectでsshを使って自動でログインしようとしたところ、
パスワードを確認する表示で出た瞬間に処理が終わってしまう現象に悩まされました。
expect -c "
set timeout 5
spawn ssh 〇〇@$IPアドレス
expect {
\"(yes/no)?\" {
send \"yes\n\"
exp_continue
}
\"password:\" {
send \"パスワード\n\"
}
}
〇〇@IP's password: [〇〇]$
って感じですぐ終了してしまいました。
解決策として、expect \"$\"を最後に追加すると動作しました。
expect -c "
set timeout 5
spawn ssh 〇〇@$IPアドレス
expect {
\"(yes/no)?\" {
send \"yes\n\"
exp_continue
}
\"password:\" {
send \"パスワード\n\"
}
}
expect \"$\"
$ が出るまで待機する必要で、待機しないとすぐ処理終了とみなしてしまうということだろうか。。。
波括弧とコマンドの間にスペースを入れないと文法エラーになるということを知らず、スペース入れていないから動かず悩むもやった。シェルスクリプト難しい。
[改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる (WEB+DB PRESS plus)
- 作者:山森 丈範
- 発売日: 2017/01/20
- メディア: 単行本(ソフトカバー)