質問: expectでscpのパスフレーズ入力を自動化 別サーバーに存在するファイルを、scpでダウンロードしています。 これをcronを使用して自動実行させたいのですが、パスフレーズ入力の自動化で悩んでいます。 expectを使ってみましたが、以下のようにエラーもなく、反応でした。 expectの書き方が悪いのだと思いますが、ご教授いただけましたら助かります。 ○やりたいこと サーバーa(linux)から、サーバーb(linux, 192.168.1.100)のファイルをデイリーで自動ダウンロードしたい。 以下のtest.shを作って実行してみましたが、エラーも無く無反応です。 expectは導入されています。 ○環境 ・サーバーaからサーバーbへは、sshでアクセスできる。 ・秘密鍵を/home/testuser/.ssh/に置いている。 ・サーバーbへは、パスフレーズを入力するだけでsshでログインできる。 ・パスワードでの認証はdisable ■手入力では、このようにファイルをダウンロードできています。 $ scp 192.168.1.100:/home/testuser/test.txt ./ enter passphrase for key '/home/testuser/.ssh/id_dsa': ★ここでパスフレーズを手入力★ test.txt 100% 5 0.0kb/s 00:00 ■test.sh ----------- #!/bin/sh file=192.168.1.100:/home/testuser/test.txt target=/home/testuser/ password=hogehoge expect -c " set timeout 20 spawn scp $file $target #expect \"enter passphrase for key '/home/testuser/.ssh/id_dsa':\" ; #send \"$password\r\"; " ■実行結果(エラー表示無し。ファイルはダウンロードされない) $ sh test.sh spawn scp 192.168.1.100:/home/testuser/test.txt /home/testuser/ $ 以上、よろしくお願いします。
回答: 秘密鍵作成時にパスワード無しで作っとけばいいと思うんですが、だめですか? うちのデータセンターのシステムでは、ファイル転送ユーザ(実際にはロックされたアカウントです)はパスワード無しでscpできるようにしています。 心配ならscponlyを入れておけばさらに安心と思いますが。