UbuntuサーバーシステムにopenSSHサーバーを設定し、公開/秘密鍵(パスワードなし)を使用するように構成しました。クライアントがサーバーに接続するときにパスワードと鍵の確認を要求したいので、そのパスワードを利用して秘密鍵を生成しました。問題は、クライアントがサーバーに初めて接続しようとしたときにのみパスワードが必要であり、同じクライアントからの後続の接続は、パスワードを再度要求せずに自動的に接続されることです。 1つの例外は、クライアントコンピュータが再起動される場合ですが、これは私が望むものではありません。
私はクライアントコンピュータへのフルアクセス権を持っているので、クライアントコンピュータからSSHエージェントのすべてのIDを削除する「ssh-add -D」コマンドを使用してcronジョブを追加することにしました。これは、クライアントが次に試みるときを意味します。接続すると、最初と同様にパスワードを入力するように求められます。毎時間実行するようにcronジョブにこのコマンドを追加しました(接続しようとするたびにパスワードを要求しなくても満足です)。
残念ながら、ジョブの実行時に何もしないようです。ジョブが実際に実行されたことを確認し、さらにコマンドを追加しました。すべてのコマンドが期待どおりに機能しましたが、ssh-addだけが正しく機能していないようです。
次の行を使用してクローンタスクを追加しました。
user@ubuntu:~$ crontab -u user -e
その後、編集のためにvimを選択し、次の行を追加しました。
* * * * * ssh-add -D
保存されました。
私は何が間違っていましたか?
注:私は初めてLinux(Ubuntuを使用)に触れたので、いくつかの高度な概念を理解できないかもしれません。簡単に回答していただければ幸いです:)
答え1
通常、プログラムがcronで実行されると、環境変数が異なるため、ssh-add
ssh-agentを見つけることができません。
代わりに、次のスクリプトを呼び出してすべてのプロキシを試して$SSH_AUTH_SOCK
正しく設定します。
#!/bin/sh
for agent in /tmp/ssh-*/agent.*; do
export SSH_AUTH_SOCK=$agent
if ssh-add -l 2>&1 > /dev/null; then
# working ssh-agent found
ssh-add -D # delete all identities
fi
done
答え2
おそらく追加すれば十分でしょう。
AddKeysToAgent yes
顧客に.ssh/config
?
答え3
Joeferの答えとJillのコメントのためにこれを行いました。
echo $SSH_AUTH_SOCK
コマンドラインでは、次のように表示されます。
/run/user/1000/keyring/ssh
したがって、crontabで実行すると、これは私にとって効果的です。
export SSH_AUTH_SOCK=/run/user/1000/keyring/ssh && ssh-add -D