原因は、expectスクリプトの最後が、
interact
となっていたこと。
これを、
expect eof
exit
と直すことで無事動かすことが出来ました。
元のシェルスクリプト(端末で動作)
#!/bin/sh host="user@host" pass="password" command="実行するコマンド" expect -c " set timeout 10 spawn ssh ${host} ${command} expect \"Are you sure you want to continue connecting (yes/no)?\" { send \"yes\n\" expect \"${host}'s password:\" send \"${pass}\n\" } \"${host}'s password:\" { send \"${pass}\n\" } interact "
修正後のシェルスクリプト(crontabで動作)
#!/bin/sh host="user@host" pass="password" command="実行するコマンド" expect -c " set timeout 10 spawn ssh ${host} ${command} expect \"Are you sure you want to continue connecting (yes/no)?\" { send \"yes\n\" expect \"${host}'s password:\" send \"${pass}\n\" } \"${host}'s password:\" { send \"${pass}\n\" } expect eof exit "
参考にしたページ:
crontabでexpectコマンドが動かない
私も同じ状況になり悩みました。
返信削除こちらの記事に従って、interactをexpect eof; exitに差し替えることで無事解決しました。
大変助かりました。ありがとうございました。
ありがとうございました。
返信削除悩んでいた現象が回避されました。
諦めかけていたところ、こちらの記事を拝見して解決しました。
返信削除ありがとうございました。
数年前の記事ですが助かりました。
返信削除ちなみにJenkinsからシェルスクリプトで実行する際に同じ現象が起きており、これで回避できました