ウェブサイト検索

Linuxで「Permission denied (publickey)」SSHエラーを修正するにはどうすればよいですか?


あなたの公開SSHキーが問題を引き起こしていますか?これらの解決策のいずれかを試してみてください。

SSHはリモートマシンに接続するための便利なツールですが、Linuxで公開鍵に関する「Permission denied (publickey)」エラーに遭遇することがあります。幸いなことに、それをトラブルシュートするための簡単な修正方法がいくつかあります。

公開鍵とは何ですか?

LinuxでSSHのキー ペアを生成すると、公開鍵と秘密鍵が与えられます。秘密鍵は厳重に保管されますが、公開鍵はリモートサーバーに送信されて、パスワードなしでログインできるようにします。ローカルのSSHクライアントは、接続時に公開鍵を秘密鍵に照合します。

この方法の利点は、公開鍵だけを提供すれば良いということです。プライベート鍵を秘密のままにしておく限り、公開鍵が危険にさらされた場合でも安全でいられるはずです。公開鍵は単独では無意味です。

OpenSSHは、オープンソースの世界で最も広く使用されているSSHクライアントおよびサーバーであり、リモートマシン上の公開鍵を含むファイル(あなたのホームディレクトリの「.ssh/authorized_keys」)に特定のアクセス権が必要です。他のユーザーに対して書き込み権限が設定されている場合は動作しません。この状態は「全員書き込み可能」と呼ばれます。ディレクトリ名がピリオド(.)で始まるため、ls -Aコマンドを使用しない限り、lsリストには表示されません。

ファイルが別のコンピュータからコピーされた場合や、あなた自身が作成した場合、権限が変更されることがあります。幸いなことに、これは簡単に修正できます。

公開鍵の権限を確認してください

authorized_keysファイルは、リモートマシンでアカウントにログインできるようにしたいクライアントのすべての公開鍵を含むプレーンテキストファイルです。その権限を確認するには、-lオプションを付けてlsコマンドを使用します。

ls -l ~/.ssh/authorized_keys

これは所有者、グループ、その他のユーザーの権限設定を表示します。文字列の最後の6文字に注意してください。それらの中に「w」が含まれている場合、それはグループや他のユーザーが書き込み可能であることを意味し、安全ではありません。

このファイルはあなたが書き込み可能であるべきですが、グループや他のユーザーにはそうでないべきです。適切なユーザーにアクセスを与えるために、chmodを使用して権限を変更できます。

二つの方法があります: 数値的におよび象徴的に。

数値方式は短いですが、八進法の権限番号を暗記する必要があります。

chmod 700 ~/.ssh/authorized_keys

記号的な方法はより記憶に残りやすいです。

chmod go-w ~/.ssh/authorized_keys

ssh-agentを使用して安全に鍵をコピーする

あなたは自分のコンピュータから任意の公開鍵を~/.ssh/.authorized_keysファイルに手動でコピー&ペーストすることができますが、ssh-agentプログラムを使用することで、権限エラーが発生する可能性を減らすことができます。

ssh-agentを開始するには、次のコマンドを使用します:

eval "$(ssh-agent-s)"

ssh-agentを使用してリモートサーバーにログインするには、sshコマンドで-Aオプションを使用します。

ssh -A user@example.com

リモートサーバーのsshd設定を確認してください

これらの努力のいずれかが失敗した場合、rootアクセスがある場合は、リモートマシンのsshdサーバーにいくつかの設定変更を行う必要があるかもしれません。そうでない場合は、SSH接続の問題を解決する手助けをするためにシステム管理者に連絡しなければならないでしょう。これは最後の手段の方法であり、システムのセキュリティが低下する可能性があります。

sshd のシステム全体の構成ファイルは/etc/ssh/sshd_configです。これは root によって所有されているため、編集するには sudo を使用する必要があります。例えば、Vim で編集するには:

sudo vim /etc/ssh/sshd_config

sshdがauthorized_keysファイルが全員書き込み可能であってもログインできるようにするには、このファイル内の「StrictModes」オプションを「no」に設定します。

保存してSSHサーバーを再起動します:

sudo systemctl restart sshd.service

これでSSH公開鍵の権限エラーを修正できます。

リモートシステムでSSH公開鍵に関するエラーが発生することがあります。幸いなことに、ほとんどの場合、他の誰もあなたの鍵を見えないようにファイルのパーミッションを確認して設定するだけで済みます。また、より信頼性の高い接続のためにssh-agentを使用することもできます。最終手段として、SSHサーバーの厳格さを緩和することも可能です。

関連記事: