1. クライアントでSSH鍵を生成する#
ローカルのノートパソコンや開発マシンで、次を実行します。
ssh-keygen -t ed25519 -C "your_email@example.com"既存の環境でRSA鍵が必要な場合は、次の形式も使えます。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"通常、次の2つのファイルが作成されます。
~/.ssh/id_ed25519 秘密鍵
~/.ssh/id_ed25519.pub 公開鍵秘密鍵は他人へ渡さず、公開鍵だけをサーバーへ登録します。複数用途を分けたい場合は、-f ~/.ssh/id_ed25519_serverのように保存先を指定します。
2. サーバーへ公開鍵を登録する#
サーバーのIPアドレスを192.168.1.108、ユーザー名をice345とします。
方法A:ssh-copy-id#
ssh-copy-id -i ~/.ssh/id_ed25519.pub ice345@192.168.1.108一度だけサーバーのパスワードを入力すると、公開鍵がサーバーの~/.ssh/authorized_keysへ追加されます。
方法B:手動で登録する#
ssh-copy-idがない場合は、次の手順を使います。
cat ~/.ssh/id_ed25519.pub
ssh ice345@192.168.1.108
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keyscatで表示した公開鍵を、サーバー側のauthorized_keysへ1行のまま貼り付けます。
3. 鍵認証を確認する#
クライアントから接続します。
ssh -i ~/.ssh/id_ed25519 ice345@192.168.1.108鍵のパスフレーズを設定していれば、接続時にパスフレーズを求められることがあります。これはサーバーアカウントのパスワードとは別のものです。
4. sshdを設定する#
サーバー側で/etc/ssh/sshd_configを確認します。
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitRootLogin no公開鍵で接続できることを確認してから、パスワード認証を無効化します。
PasswordAuthentication no設定を反映する前に構文を検査します。
sudo sshd -t
sudo systemctl restart sshdディストリビューションによってサービス名がsshの場合があります。
5. 権限とファイアウォール#
| パス | 推奨権限 |
|---|---|
~/.ssh/ | 700 |
~/.ssh/authorized_keys | 600 |
| 秘密鍵 | 600 |
ファイアウォールではSSHポートを必要なネットワークからだけ許可します。ポート番号を変更しても、公開鍵認証、強いパスワード、Fail2banなどの対策の代わりにはなりません。
まとめ#
- クライアントで秘密鍵と公開鍵を生成する。
- 公開鍵だけを
authorized_keysへ登録する。 - 公開鍵認証で接続できることを確認する。
sshd -tで検査してから、必要に応じてパスワード認証を無効化する。

