- PR -

ssh-addとexpectによるパスフレーズ入力がcronでは機能しない

1
投稿者投稿内容
ふらみんご
会議室デビュー日: 2003/11/11
投稿数: 10
投稿日時: 2005-07-14 10:07
ssh認証エージェントの初回パスフレーズ入力を自動化させる為、次のようなシェルスクリプトを書きました。
expectを使っているのですが、cronから起動した場合はパスフレーズの入力が働きません。
原因としてどのあたりを疑うべきでしょうか。

◆シェルスクリプト
コード:
eval `ssh-agent -s`
expect -d -c '
spawn ssh-add /home/hoge/.ssh/id_dsa
expect "Enter passphrase for"
send "hogehoge\\r"
interact
'



◆端末から起動した場合のログ
コード:
Agent pid 7260
expect version 5.42.1
spawn ssh-add /home/hoge/.ssh/id_dsa
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {7262}

expect: does "" (spawn_id exp4) match glob pattern "Enter passphrase for"? no
Enter passphrase for /home/hoge/.ssh/id_dsa:
expect: does "Enter passphrase for /home/hoge/.ssh/id_dsa: " (spawn_id exp4) match glob pattern "Enter passphrase for"? yes
expect: set expect_out(0,string) "Enter passphrase for"
expect: set expect_out(spawn_id) "exp4"
expect: set expect_out(buffer) "Enter passphrase for"
send: sending "hogehoge\\r" to { exp4 }
tty_raw_noecho: was raw = 0  echo = 1
spawn id exp4 sent <\\r\\n>

spawn id exp4 sent <Identity added: /home/hoge/.ssh/id_dsa (/home/hoge/.ssh/id_dsa)\\r\\n>
Identity added: /home/hoge/.ssh/id_dsa (/home/hoge/.ssh/id_dsa)
interact: received eof from spawn_id exp4



◆cronから起動した場合のログ
コード:
Agent pid 7297
expect version 5.42.1
spawn ssh-add /home/hoge/.ssh/id_dsa
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {7299}

expect: does "" (spawn_id exp3) match glob pattern "Enter passphrase for"? no
Enter passphrase for /home/hoge/.ssh/id_dsa:
expect: does "Enter passphrase for /home/hoge/.ssh/id_dsa: " (spawn_id exp3) match glob pattern "Enter passphrase for"? yes
expect: set expect_out(0,string) "Enter passphrase for"
expect: set expect_out(spawn_id) "exp3"
expect: set expect_out(buffer) "Enter passphrase for"
send: sending "hogehoge\\r" to { exp3 }
interact: received eof from spawn_id exp0

ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2005-07-14 22:57
expectはあんまり知らないですが...
cronから起動してinteract、ってのはどうなんざましょ。
制御端末が無いので、標準入力から即座にEOFを受け取った状態に
なりそうな気がするですが、どうでしょ。
ふらみんご
会議室デビュー日: 2003/11/11
投稿数: 10
投稿日時: 2005-07-15 13:42
interactの直前に、次の応答をexpectで待つようにしたら解決しました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)