3

ssh エージェント転送が cron ジョブで機能しないのはなぜでしょうか。次のような簡単なスクリプトがあります。

ssh -A remote_host "ls ~"

パスワードを入力せずにこのスクリプトを実行できますが、cron ジョブ内に配置すると、常に次のエラーで失敗します。

Permission denied, please try again.

Received disconnect from ip_of_remote_host: 2: Too many authentication failures for myuser

誰でもこの問題を解決する方法を教えてもらえますか?

どうもありがとう!

4

2 に答える 2

2

ssh-agent の起動時に SSH_AGENT_PID または SSH_AUTH_SOCK を env ファイルに保存し、それを ssh スクリプトでソースする必要があります。

これは、ずっと前にウェブから取得した、私が使用したスクリプトです。

SSH_ENV=$HOME/.ssh/environment
function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
     echo succeeded
     chmod 600 ${SSH_ENV}
     . ${SSH_ENV} > /dev/null
     ssh-add id_rsa
}
if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
         start_agent;
     }
else
     start_agent;
fi

キーがパスフェーズで保護されている場合は手動で実行し、 $HOME/.ssh/environment のように保存します

SSH_AUTH_SOCK=/tmp/ssh-KldGwK6643/agent.6643; export SSH_AUTH_SOCK;
SSH_AGENT_PID=6644; export SSH_AGENT_PID;

あなたの crontab で。$HOME/.ssh/environment && ssh -A blabla

サーバーが再起動した場合は、start_agent スクリプトを手動で再度実行する必要があります

于 2012-08-20T07:12:21.310 に答える
1

SSH_AUTH_SOCKssh-agent 機能を有効にするには、ssh クライアント側で環境変数を設定する必要があります (crontab では設定されません)。

*/x * * * * SSH_AUTH_SOCK=agent-sock-file ssh remote "command"

agent-sock-filecrontabの実行時に存在することを確認してください

于 2012-08-20T07:12:45.060 に答える