アラキタウン

黒歴史や生き恥を切り売り

シェルスクリプト expectでsshしようとすると、すぐ処理が終わってしまう時の対処

シェルスクリプトで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 \"$\"

 

 


$ が出るまで待機する必要で、待機しないとすぐ処理終了とみなしてしまうということだろうか。。。


波括弧とコマンドの間にスペースを入れないと文法エラーになるということを知らず、スペース入れていないから動かず悩むもやった。シェルスクリプト難しい。