婦人声明:
この質問を重複して表示する前に注意深く読んでおくと良いでしょう。 SSHが/ dev / ttyを見つけることができないという他の多くの質問(ここ、superuser.com、serverfault.comなど)を読んだ。しかし誰もkeychain
、実際にこの問題を回避する必要があります。
と言った:
私はを通過するLinux(Debian Stretch)ルーターを持っていますpppoe
。プロバイダは時々変更される動的IPアドレスを提供します。これが発生するたびに、ルーターはSSHを介して他のホストでスクリプトを実行する必要があります。
公開鍵認証を使用して、ルーターや他のホストにSSHを正しく設定しました。 SSHキーはパスワードで保護されています。
keychain
また、提案どおりに設定しました。ここ。このページ(および他のページ)の私の理解によれば、keychain
同じプロセスがすべてのSSHクライアントに「表示」されます。ssh-agent
ログインすると起動しssh-agent
(まだ実行されていない場合)、パスワードを要求します(またはsshに尋ねます)。その時点から、SSHキーはssh-agent
メモリにあり、他のプロセスで簡単に使用できます。
これは次の例外に適用されます。
スクリプトをに入れました/etc/ppp/ip-up.d
。スクリプトには次の行が含まれています。
eval `/usr/bin/keychain --noask --agents ssh --eval id_rsa_ipupdate`
ssh -i /root/.ssh/id_rsa_ipupdate [email protected] '/path/to/remote/command'
プロバイダが新しいIPアドレスを割り当てるたびに、スクリプト自体が期待どおりに実行されますが、SSHコマンドは失敗します。離れてホストは実行されません。これをデバッグするのに時間がかかりましたが、pppd
別のファイルにデバッグメッセージを記録した後、ついに原因を見つけました。 pppdデバッグメッセージのいくつかの関連行:
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug2: input_userauth_pk_ok: fp SHA256:BZSkP9mMIB+cCi5WfgYnqT2QmskTgsKHsWuNXHxIQu0
debug3: sign_and_send_pubkey: RSA SHA256:BZSkP9mMIB+cCi5WfgYnqT2QmskTgsKHsWuNXHxIQu0
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug2: no passphrase given, try next key
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).
したがって、SSHは/ dev / ttyを見つけることができません。これはおそらく正常です。pppd
これは内部で実行されるため、キーボードからパスワードを読み取ることができないためです。今まではそんなに良くなった。
しかし、コアは次のとおりです。ssh-agent
SSHが実行中で管理されていてキーを簡単に使用できるにもかかわらず、keychain
SSHがキーボードからパスワードを読みたいのはなぜですか?
上記のスクリプトスニペットの最初の行を参照してください。これを確認し、SSH_AUTH_SOCK
正しくSSH_AGENT_PID
設定してエクスポートする必要があります。
また、コマンドラインからスクリプトを実行すると完全に実行されます(パスワードは必要ありません)。
明確に言えば、まずルーターにログインします。ホームページで提案どおりに設定したため、keychain
ログインするとすぐにパスワードの入力を求められます。その後、コマンドラインから私のスクリプトを呼び出すと、パスワードを要求せずに期待どおりに機能します。ただし、スクリプトを呼び出すと、pppd
SSH行は失敗します。
SSHがssh-agentからキーをロードできるにもかかわらず、SSHに/ dev / ttyが必要な理由と、この問題を解決する方法を説明できる人はいますか?
PSはい、少なくとも一度はログインするまで、ルーターの再起動後にスクリプトが必然的に失敗するという事実を受け入れることができます。 :-)
編集1
もっと詳しく調べたところ、次のことがわかりました。
eval `/usr/bin/keychain --noask --agents ssh --eval id_rsa_ipupdate`
ssh-agent
上記のスクリプトは、認定されたIPアドレスの変更によってスクリプトが実行されると、2番目のプロセスを作成します。pppd
これはkeychain
、奇妙な理由で最初のキー(SSHキーを含む)が見つからないことを意味します。
繰り返しますが、pppd
これはスクリプトがによって実行される場合にのみ発生します。コマンドラインからスクリプトを呼び出すと、すべてが正常です。
今はバグレポートやそのようなものを公開することを検討しています。ところで、私のkeychain
バージョンは2.8.2
。