SSH鍵認証構築方法(Ubuntu 26.04.01編)
機種: Macbook Air M4
仮想システム: UTM for Mac
仮想メモリ: 2GB
HDD : 20G
仮想OS: Ubuntu Server 26.04.01 LTS
ほぼ、AIで作ってます
正直AIでやってますので、気兼ねしてます
*SSH鍵認証接続の利点の個人的な見解
SSH鍵認証は、鍵であるファイルがなければ、たとえパスワードが漏れても、接続が不可能なんです。
つまり、IDやパスワードを盗まれても、ファイルを盗まれない限り大丈夫
しかも、たとえ鍵ファイルを盗まれてもSSHサーバ側でパスワードが設定されてるファイルの項目のデータを削除するだけで、その後はそのIDとパスワードはサーバアクセスはできなくなります
-
鍵を設定するにあたって
鍵に使うパスワードを用意しておいてください -
ファイアウォールの設定は今回は割愛させていただきます
-
この記事は、VPN上では行っておりません
この流れでやります
- MacOS で鍵を作成する
- SSH鍵のセキュリティ設定
- 公開鍵をUbuntuサーバーに登録する
- sshで接続
- サーバへ移動し、セキュリティのため、所有者のみ読み書き実行可能にする
- 公開鍵認証とパスワード認証の現在の設定を確認する
- 設定ファイルをバックアップ
- 設定ファイルを編集
- Sshdの再起動 -- デーモンから再起動しないといけないみたいです
- sshコマンドの設定(設定しないなら11)へ)
- SSH接続
01) MacOS で鍵を作成する
*「SSH鍵(秘密鍵と公開鍵)のファイル名(保存名)」ところには
鍵に使う名前をつけてください
*今後、鍵のファイル名を「SSH鍵(秘密鍵と公開鍵)のファイル名(保存名)」として
この記事は書いていきます
% ssh-keygen -t ed25519 -f ~/.ssh/「SSH鍵(秘密鍵と公開鍵)のファイル名(保存名)」
AI調べ:
うんちくです
Ed25519(エド25519)とは、非常に高い安全性と高速な処理速度を兼ね備えたモダンな公開鍵暗号(電子署名)のアルゴリズムです。
主にサーバーへ安全に接続するためのSSH鍵の作成などで広く使われており、現代のシステム開発において最も推奨される方式の一つとなっています。
それまで主流だった「RSA」という古い方式に比べ、多くのメリットがあるため急速に普及しました。
とのこと
オプションの-f 以降を付けない場合
Enter file in which to save the key (/Users/ユーザ名/.ssh/id_ed25519):
とでます
ここで、名前をつけることもできます
また、付けなければ
標準で
id_ed25519
という名前で構築されます
すると
Generating public/private ed25519 key pair.
Enter passphrase for "/Users/ユーザ名/.ssh/「SSH鍵(秘密鍵と公開鍵)のファイル名(保存名)」" (empty for no passphrase):
と出ると思います
ここで、パスフレーズつまり鍵のパスワード❓️を入力して登録します
入力したらも一度聞いてきましたので、先ほどと同じものを入力してください
Enter same passphrase again:
02) SSH鍵のセキュリティ設定
% sudo chmod 600 ~/.ssh/「SSH鍵(秘密鍵と公開鍵)のファイル名(保存名)」
03) 公開鍵をUbuntuサーバーに登録する
% ssh-copy-id -i ~/.ssh/「SSH鍵(秘密鍵と公開鍵)のファイル名(保存名).pub」 ユーザー名@サーバーのIPアドレス
コピーするのは、.pubファイルです
- パスワードは、最初にユーザを作ったときのパスワードです
- どこのディレクトリにauthorized_keys(記録される鍵情報ファイル)が用意されるかですが
ssh-copy-idで指定した、/home/ユーザ名/.sshに格納されます
04) sshで接続
% ssh ユーザー名@サーバーのIPアドレス
普通の最初のパスワードでログイン
05) サーバへ移動し、セキュリティのため、所有者のみ読み書き実行可能にする
$ sudo chmod 700 ~/.ssh
$ sudo chmod 600 ~/.ssh/authorized_keys
ひとまとめにすると
$ sudo chmod 700 ~/.ssh; sudo chmod 600 ~/.ssh/authorized_keys
06) 公開鍵認証とパスワード認証の現在の設定を確認する
$ sudo sshd -T | grep -E '^(pubkeyauthentication|passwordauthentication|permitrootlogin) '
例えば、現段階では結果、次の通りです
permitrootlogin prohibit-password
pubkeyauthentication yes
passwordauthentication yes
それぞれの意味は次のとおりです。
設定 意味
permitrootlogin prohibit-password rootはパスワード認証ではログインできない
pubkeyauthentication yes 公開鍵認証を許可する
passwordauthentication yes パスワード認証も許可する
- sshd -T は、設定ファイルや関連設定を反映したSSHサーバーの有効設定を表示します。Ubuntuでは追加の設定ファイルも使われることがあるため、この確認が役立ちます。
07) 設定ファイルをバックアップ
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
- 設定ファイルをもとに戻したいときは
$ sudo mv /etc/ssh/sshd_config.backup /etc/ssh/sshd_config
08) 設定ファイルを編集
$ sudo nano /etc/ssh/sshd_config
次の設定を探します。
# PasswordAuthentication yes
コメントアウトされた行をそのまま残すのではなく、必要に応じて有効な設定行として次のように指定します。
公開鍵認証を許可する
PubkeyAuthentication yes
/etc/ssh/sshd_config.d/50-cloud-init.confのパスワード認証を無効にする
$ sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf
PasswordAuthentication yes
↓
PasswordAuthentication no
- nanoで保存するには Ctrl + O → Enter、終了するには Ctrl + X です。
続けて、実際に適用される設定を確認します。
公開鍵認証とパスワード認証の有効設定を再確認する
sudo sshd -T | grep -E '^(pubkeyauthentication|passwordauthentication) '
次のように出れば大丈夫
permitrootlogin prohibit-password
pubkeyauthentication yes
passwordauthentication no
09) sshdの再起動 -- デーモンから再起動しないといけないみたいです
$ sudo systemctl daemon-reload
$ sudo systemctl restart ssh.socket
10) sshコマンドの設定(設定しないなら 11) へ)
クライアント側の.sshディレクトリのconfigというファイルを編集
○自宅のUbuntu Serverへの接続設定
Host ホスト名
HostName XXX.XXX.XXX.XXX(SSHサーバのIPv4アドレス)
User SSH_USER名
IdentityFile ~/.ssh/「SSH鍵(秘密鍵と公開鍵)のファイル名(保存名)」
IdentitiesOnly yes
11) SSH接続
クライアント側から
% ssh -i ~/.ssh/「SSH鍵(秘密鍵と公開鍵)のファイル名(保存名)」 ユーザー名@サーバーのIPアドレス
で接続
または、
クライアント側の.sshディレクトリのconfigというファイルを編集してるのなら
% ssh ホスト名
パスワード入力は、
パスフレーズつまり鍵のパスワードで接続
1度、もともとのパスワードで入らないか確認をしてみてください