![Bash スクリプト経由で SSH-Agent にキーを追加すると、「Permission denied (publickey)」というエラーが発生する](https://rvso.com/image/1601564/Bash%20%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E7%B5%8C%E7%94%B1%E3%81%A7%20SSH-Agent%20%E3%81%AB%E3%82%AD%E3%83%BC%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E3%80%8CPermission%20denied%20(publickey)%E3%80%8D%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B.png)
私のモバイル デバイスと Raspberry Pi (偶然にもそれぞれ AArch と ARM CPU) の両方で、ssh-agent
デフォルトではロードされません。
まず始めに以下を開始する必要がありますssh-agent
:
eval `ssh-agent -s`
次に、エージェントにキーを追加します。
ssh-add /home/jimjamz/.ssh/myKey
パスワードの入力を求められますので、入力します。すると、キーがエージェントに追加されます。
Enter passphrase for /home/jimjamz/.ssh/myKey:
Identity added: /home/jimjamz/.ssh/myKey (/home/jimjamz/.ssh/myKey)
その後、キーを再度指定しなくてもリモート サーバーに接続できるようになります。
便宜上、エージェントを起動してキーを追加するスクリプトに上記を追加します。
#!/bin/bash
eval `ssh-agent -s`
ssh-add /home/jimjamz/.ssh/myKey
スクリプトを実行すると、エージェント プロセスが開始され、秘密キーのパスワードの入力を求められます。これを正しく入力すると、キーがエージェントに追加されます。
ただし、リモート サーバーに ssh しようとすると、次のメッセージが表示されます。
Permission denied (publickey).
問題は、ssh-add
bash スクリプト内での呼び出しにあるようです。ssh-add
スクリプトの外部で手動で呼び出してから、リモート サーバーに ssh で接続しようとすると、接続できます。
ssh-add
bash スクリプト内で呼び出された場合、キーがすでに追加されていることが認識されないのはなぜですか?
他のマシンの 1 つ (ssh-agent がデフォルトで既にロードされている) で bash スクリプトを実行すると、スクリプト内に追加されたキーを使用してリモート サーバーに ssh で接続できます。ssh-agent がデフォルトで自動的に実行されていないデバイスでは機能しないようです。