SSH経由でUbuntuサーバーを管理する場合、パスワード認証を行う前に公開鍵を準備しておく必要があります。この点が、私がよく見かける間違いです。 sshdサービスを再起動してみると、キーが適切にテストされていなかったことが判明した。
このガイドでは、まず重要なことから始めます。 ed25519サーバーに公開鍵をインストールし、テストのために別のセッションを開いてから、パスワードを無効にします。時間はそれほど長くかかりませんし、誤ってアカウントをロックアウトされるのを防ぐことができます。

お使いのコンピュータにSSHキーed25519を作成してください。
ローカルマシン上で、ed25519形式の鍵を生成してください。これは、一般的なSSH管理において私が現在推奨する形式です。
ssh-keygen -t ed25519 -a 100 -C "admin@post"
このコマンドは、キーの保存場所を尋ねます。専用のキーをまだ作成していない場合は、提示されたパスを使用してください。
~/.ssh/id_ed25519
パスフレーズを追加してください。ノートパソコンやオフィス外に持ち出すコンピューターでは、秘密鍵を保護せずに放置しておくべきではありません。パスフレーズは、ファイルがコピーされたり、コンピューターが不正アクセスされたりした場合に、鍵を保護します。
次に、両方のファイルが存在することを確認します。
ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
拡張子のないファイル 。パブ は秘密鍵です。サーバーに送信したり、チケットにコピーしたり、共有したりしてはいけません。 。パブ これは公開鍵であり、Ubuntuにインストールする鍵です。
Ubuntuに公開鍵をインストールする
パスワードアクセスがまだ可能な場合は、最も簡単な方法は ssh-copy-id :
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
交換する ユーザー 対象のSSHアカウントを介して、 サーバ IP アドレスまたは名前で IN します。このコマンドは公開鍵を IN に追加します。 ~/.ssh/authorized_keys サーバー側。
もし ssh-copy-id 利用できない場合は、既存のSSHセッションから手動で実行できます。
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ファイルの内容全体を1行貼り付けてください id_ed25519.pub秘密鍵を貼り付けないでください。不明な場合は、公開ファイルは通常、 ssh-ed25519。
古いセッションを閉じる前に、別のセッションでテストしてください。
現在のSSHセッションを閉じないでください。別のターミナルを開き、以下のキーを使用して接続をテストしてください。
ssh -i ~/.ssh/id_ed25519 user@server
アカウントパスワードなしでサーバーにアクセスした場合、キーは機能します。それでも接続時にユーザーパスワードを求められる場合は、まず権限を確認してください。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys
Ubuntuでは、鍵が拒否された場合はSSHログも確認してください。
sudo journalctl -u ssh -n 80 --no-pager
フォルダの所有者が間違っている、キーが複数行にまたがって貼り付けられている、またはターゲットアカウントが異なるといった場合、認証がブロックされる可能性があります。この手順が完了するまで、SSH設定を変更しないでください。
パスワードを無効にする前にsshdを準備してください
設定を変更する前に、メインファイルをバックアップしてください。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
次に、ファイルがあるかどうかを確認します。 /etc/ssh/sshd_config.d/ 既にキーまたはパスワードによる認証を定義しています。
sudo grep -R "^PubkeyAuthentication|^PasswordAuthentication" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*.conf 2>/dev/null
Ubuntuでは、メインファイルの途中の10行を修正するよりも、専用のファイルを作成する方が好きです。
sudo nano /etc/ssh/sshd_config.d/99-disable-password.conf
追加:
公開鍵認証 はい
パスワード認証なし
SSHを再起動する前に、構文をテストしてください。これはリモートサーバー上では必須事項です。
sudo /usr/sbin/sshd -t
コマンドが何も返さない場合は、構文は有効です。エラーが表示された場合は、再読み込みする前にエラーを修正してください。
アクセスを遮断せずにSSHをリロードします
構文が検証されたら、サービスを再読み込みしてください。
sudo systemctl reload ssh
sudo systemctl status ssh --no-pager
最初のセッションは開いたままにしておきます。別のターミナルで、キーベースの接続を再テストします。
ssh -i ~/.ssh/id_ed25519 user@server
また、テスト用アカウントやキーがロードされていないマシンがあれば、キーレス接続が失敗するかどうかもテストしてください。目的は、設定行を読み取るだけでなく、実際の動作を確認することです。
UbuntuでSSHを使用している場合は、このガイドを手元に置いておきましょう。 UbuntuでSSHを再起動するローカルファイアウォールがある場合は、以下の記事でルールを確認してください。 サーバーを開く前にUFWを実行。
ロックダウンを防ぐためのチェック
- 秘密鍵はあなたのコンピュータにのみ保存されます。
- 公開鍵は確かに
~/.ssh/authorized_keys適切なユーザー。 - 権利は正しい
~/.sshそして許可されたキー; - 鍵ごとに2つ目のSSHセッションが、中断される前に機能します。
sudo /usr/sbin/sshd -tエラーは返されません。- ファイアウォールは引き続き正しいSSHポートを許可しています。
変更後にSSHアクセスが失われた場合は、リカバリコンソール、KVM、クラウドプロバイダーアクセス、またはレスキューモードを使用する必要があります。この方法はそれを防ぐことを目的としています。より包括的な修復については、ガイドも参照してください。 UbuntuへのSSHのクリーンインストール。
公式ドキュメントについては、Ubuntu は、 OpenSSHサーバー参考ページ ssh-keygen そして ssh-copy-id また、ここで使用されているオプションについても詳しく説明しています。