Snow LeopardからLionにアップグレードしたところ、sshを使用するcronジョブが機能しなくなりました。ssh-agentは期待どおりに機能していないようです。
以下は、Snow Leopardの下でうまく機能した、cronから呼び出されたスクリプトのバウドラー化されたバージョンです。
#!/bin/bash
whoami # just to verify I'm running as myself, not root
ssh-agent # just to see what it outputs
eval `ssh-agent`
ssh -vvv REMOTESERVER ls
コマンドプロンプトから実行すると、このスクリプトは期待どおりに機能します。
cronから実行すると、機能しません。ssh-agentの出力は正常に見えます。
SSH_AUTH_SOCK=/tmp/ssh-QRxPUMRxbu/agent.17147; export SSH_AUTH_SOCK;
SSH_AGENT_PID=17148; export SSH_AGENT_PID;
echo Agent pid 17148;
Agent pid 17150
しかし、ssh -vvv
出力は、秘密鍵を読み取る必要があるときに失敗することを示しています。
debug1: Server accepts key: pkalg ssh-dss blen 818
debug2: input_userauth_pk_ok: fp ...
debug3: sign_and_send_pubkey: DSA ...
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
debug1: read_passphrase: can't open /dev/tty: Device not configured
debug2: no passphrase given, try next key
言い換えれば、私はのパスフレーズを入力することを期待していますが~/.ssh/id_dsa
、これはもちろんcronジョブでは動作しません。
これはすべてSnow Leopardで機能しました。
私はそのようキーチェーンアクセスのセットアップを持っていることに注意してくださいssh
、ssh-agent
とssh-add
私のための私のパスフレーズを読み取ることが許可されている.ssh/id_dsa
結果として、私が今まで私のパスフレーズを入力することなく、端末プロンプトからのSSHことができます-ファイル。
この問題ssh-add
は、ログインプロセスのある時点で実行する必要がありますか?標準のbashプロンプトからそれを実行しても、cronジョブは実行されません(ただし、奇妙なことに、パスフレーズの入力が求められます...キーチェーンアクセス構成のb / cは不要だと思います)。
注1-私をリダイレクトする前に-私はここに同様の質問があることを知っています(
Mac OS X Lionとsshpass)が、それは特にsshpass
私が使用していないプログラムに関するものです(私はその質問もこの質問によって答えられると信じていますが)。
注2-パスフレーズなしのSSHキーで問題が解決することを認識しています。しかし、私はこのルートに行きたくないのです。