公開鍵と秘密鍵のペアがあります。どちらにも、関連するパスフレーズはありません。
プライベートまたはパブリックのいずれかを使用してsshを実行しようとするとき(そして、公開鍵のみを使用するべきだと確信しているとき)はいつでも、パスフレーズをたずねられ、当然接続できません。
誰もがこれを回避する方法を知っていますか?誤ってコマンドを入力していますか? 〜/ .ssh/configファイルで設定したサーバーにsshしようとしています(正確に同じ設定が別のサーバーでも機能するため、〜/ .ec2/key.ppkに格納されているキーを使用)
Puttygen.exeを使用してパスフレーズ付きの新しい秘密キーを生成し、そのキーを使用してみましたが、パスフレーズを入力しても失敗します。
まず、パスフレーズが含まれるのは秘密鍵です。これは、リモートサーバーに格納されている公開キーに対して検証します。
おそらく、opensshでPuTTY秘密鍵(ppk
)鍵形式を使用しようとしているのでしょうが、これは機能しません。これが当てはまる場合、PuTTYgenにはopensshのエクスポートオプションがあります。
ssh-rsa AAAAB3NzaC1y...... etc
また、sshを実行しようとしているサーバーの公開鍵が、承認された鍵ファイル(通常~/.ssh/authorized_keys
内)に正しく格納されていると想定しています。
別の推測では、正しいキーが選択されていません。私がしようとするいくつかのことは次のとおりです。
次のように、ssh-keygen
を使用してキーのパスフレーズをリセットします...
$ ssh-keygen -f ~/.ec2/key.ppk -p
これにより、実際にキーにパスフレーズがすでにある(またはない)かどうかが確認されます。
次に、公開キーを明示的に指定して、詳細な出力を使用して接続を試みます。
$ ssh Host -i ~/.ec2/key.ppk -vvv
これにより、何が起こっているのかについての詳細がわかります。
Ssh-agentを実行できます。説明については here を参照してください。
(bashで)私のために働いた短いバージョン:
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-rnRLi11880/agent.11880; export SSH_AUTH_SOCK;
SSH_AGENT_PID=11881; export SSH_AGENT_PID;
echo Agent pid 11881;
エコーする3行を取り出して実行しました。これを行う別の方法は、-sの出力を取得することです。
$ eval `ssh-agent -s`
次に、資格情報を追加しました。
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/me/.ssh/id_rsa:
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)
パスフレーズを入力する代わりに、エージェントが資格情報を提供します。
シェルがなくなるとssh-agentがなくなると思いますので、これは起動時にスクリプト化しておくと便利です。 共有したリンク は、スクリプトについても説明しています。
公開鍵を設定するときは、おそらく(おそらく誤って)パスフレーズを使って設定します。
おそらく最初からやり直す必要があります。私はputtygenを使用していませんが、.sshディレクトリの公開鍵を削除(または名前変更)できます。ssh-keygen
新しいものを生成し(パスフレーズを提供しないように注意してください)、次にpublic_keyを、接続しようとしているサーバーのauthorized_keysファイルに共有します。
また、接続しているサーバーのauthorized-keysファイルから古いパスフレーズキーを削除する必要があるかもしれません。
秘密鍵id_rsa
の最後に余分な改行がありません。場合によっては、余分な改行によってssh-keygenがパスフレーズを要求するようになります。これを試してください:
sed '/^$/d' /path/to/key > id_rsa
テスト:
ssh-keygen -yf id_rsa
確認すべきことの1つは、sshd_configファイルにStrictModes = yesが含まれている場合、$ HOMEディレクトリまたは$ HOME/.sshディレクトリがグループまたはその他のユーザーに書き込み可能であってはなりません。それ以外の場合、認証は何があっても失敗します。
〜/ .ssh/id_rsa.pubで誤って〜/ .ssh/id_rsaファイルを上書きしてしまうというミスを犯しました。これを行うと、sshはパスフレーズを要求します。
OSXでは、次のように実行できました。
$ ssh-add ~/.ssh/id_rsa Enter passphrase for /Users/me/.ssh/id_rsa: `Identity added: /Users/mikekilmer/.ssh/id_rsa (/Users/mikekilmer/.ssh/id_rsa)
パスワードは、アプリケーション>ユーティリティフォルダにあるキーチェーンアクセスアプリケーションによって保存されました。入力したばかりですid_
を検索フィールドに入力します。
サーバー上のログファイルを表示してみてください。/var/log /authlogを参照してください(たとえば、OpenSSHの場合は/ var/log/authlogですが、一部のオペレーティングシステムではPortable OpenSSHを使用しており、 /var/log/auth.logを使用し、そのファイルの終わりを確認します。
私が見た最も一般的な原因は不正なアクセス許可です( TD1の回答 で示されています)。ただし、他の問題は、(サーバーに保存されている)公開鍵が正しいファイルにないか、またはキーがコメント化されている、またはユーザー名のスペルが間違っている。
(トラブルシューティングのために)一時的にアカウントにパスフレーズを与えることも役立ちます。その際、アカウントが正常にログインできることを確認するだけです。
ログファイルを表示してもすぐに解決されない場合は、新しい質問を投稿することをお勧めします(これは非常に一般的な質問であるため)。ログファイルの特定の詳細が含まれているため、より具体的な指示を提供できます。
先日この問題に遭遇しました。具体的には、AWS秘密鍵をあるマシンから別のマシンにコピー/貼り付けしようとしていました。
最初の文字または最後の文字が欠けているという悪い癖があります。秘密鍵の最後にあるすべてのハイフンを取得しないと(キーテキスト自体とは関係ありませんが)、秘密鍵のすべての文字を追加するまで、秘密鍵のパスフレーズを求められることがわかります。コピー元のキー(私の場合、これはキーの末尾に単一のハイフンを追加することを意味しました。)
これは、ターミナルウィンドウ間でコピーアンドペーストするのではなく、ネットワーク経由でテキストファイルをSSHすることがベストプラクティスであることを意味します。
私のチームでは、これが発生しても、ローカルでは何の問題もありません。ユーザーのsshキーまたはアクセス、あるいはその両方が、ユーザーが接続しているサーバー(この場合はホスティングプラットフォーム)で正しく構成されていません。何らかの理由で、これにより、存在しないsshキーのプロンプトがトリガーされます。