公開鍵認証の設定(Fedora42)
はじめに
"クライアント(macOS)"から"Linuxサーバー(Fedora)"へSSH接続するにあたり、公開鍵認証を設定しました。公開鍵認証の設定により、セキュリティも向上します。また追加の設定をすればパスフレーズ入力の手間も省く事ができます。
クライアント側で「秘密鍵ファイル」を、接続先サーバー側で「公開鍵ファイル」をそれぞれ保管する事で、公開鍵認証によるssh接続が可能となります。
おおまかな流れ
- クライアントで公開鍵と秘密鍵のペアを作成
- 公開鍵をサーバーに登録
- 鍵ファイルやディレクトリのパーミッション設定
- sshd_configの設定
1.鍵ペアの作成
ssh-keygenコマンドを使用し、鍵ペアを生成します。
今回はrsa暗号化方式を採用
※OpenSSH(v8.5以降)では、RSA鍵のデフォルト長は3072ビット
% ssh-keygen -t rsa
生成する鍵の保存先を聞かれるのでデフォルトでよければそのままEnter
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa):
秘密鍵にパスフレーズを設定(推奨)
※パスフレーズを設定しない場合は何も入力せずそのままEnter
※確認のため、再度パスフレーズを入力してEnter
Enter passphrase for "/Users/username/.ssh/id_rsa" (empty for no passphrase):
Enter same passphrase again:
鍵ペアが生成される
Your identification has been saved in /Users/username/.ssh/id_rsa
Your public key has been saved in /Users/username/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:AY8ZzF****************************** *****@*****
The key's randomart image is:
+---[RSA 3072]----+
| oo. o. |
| o*. o |
| o o++ |
| .. +++ |
| o .S+..o o |
| + o.Eo + |
| o o..o B . |
| =o o.@ = |
| oo.o+B.+.o. |
+----[SHA256]-----+
鍵ペア
- id_rsa:秘密鍵(クライアントで保管)
- id_rsa.pub:公開鍵(サーバーで保管)
% cd ~/.ssh
% ls id_rsa*
id_rsa id_rsa.pub
2.サーバーに公開鍵を登録
続いて生成された公開鍵を接続先サーバーに渡してあげます。
サーバーに渡す方法として、今回はscpコマンドを使用します。
クライアントからサーバーの"~/.ssh/"に公開鍵をコピー
**クライアント側の操作**
% scp ~/.ssh/id_rsa.pub <server-username>@<server-ip>:~/.ssh/
"~/.ssh"に移動
※もし.sshディレクトリが存在しない場合は"mkdir ~/.ssh"で作成
**サーバー側の操作**
$ cd ~/.ssh
公開鍵の情報をauthorized_keysファイルに追記(公開鍵の登録)
**サーバー側の操作**
$ ls id_rsa.pub
id_rsa.pub
$ cat id_rsa.pub >> authorized_keys
サーバー側の操作
念の為id_rsa.pubは削除しておく
**サーバー側の操作**
$ rm id_rsa.pub
3.パーミッション設定
公開鍵認証に必要なパーミッション設定行います。これらのパーミッションが正しく設定されていないと公開鍵認証は正常に機能しないので注意が必要です。
**サーバー側の操作**
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
4.sshd_configの設定
sshサービスの基本設定は、sshd_configファイルで制御できます。
公開鍵認証のみの接続を許可しパスワード認証による接続は拒否する、などの設定も可能です。(当記事では触れません)
sshの設定ファイルから以下の情報を編集します。(コメントアウトを外す)
- PubkeyAuthentication yes
- AuthorizedKeysFile .ssh/authorized_keys
**サーバー側の操作**
$ cat -n /etc/ssh/sshd_config | grep -e PubkeyAuthentication -e AuthorizedKeysFile
46 #PubkeyAuthentication yes
50 #AuthorizedKeysFile .ssh/authorized_keys
$ vi /etc/ssh/sshd_config
$ cat -n /etc/ssh/sshd_config | grep -e PubkeyAuthentication -e AuthorizedKeysFile
46 PubkeyAuthentication yes
50 AuthorizedKeysFile .ssh/authorized_keys
設定反映のため、sshd-serviceを再起動
**サーバー側の操作**
$ systemctl restart sshd
5.接続テスト
公開鍵認証で接続できるか確認を行います。
秘密鍵のパスフレーズを要求されればOK
パスフレーズは鍵ペア作成時に入力したものです
**クライアント側の操作**
% ssh <server-username>@<server-ip>
Enter passphrase for key '/Users/username/.ssh/id_rsa':
6.パスフレーズ入力の省略
秘密鍵にパスフレーズを設定している場合、ssh接続時にパスフレーズを要求されます。もし、パスフレーズの入力を省略したい場合は、ssh-agentを使用します。
eval "$(ssh-agent -s)" : 現在のシェルでsshエージェントを起動
ssh-add ~/.ssh/id_rsa : sshエージェントに秘密鍵を登録(メモリに秘密鍵情報を記憶している状態になり次回以降パスフレーズの入力が不要)
**クライアント側の操作**
% eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
Agent pid 63302
Enter passphrase for /Users/username/.ssh/id_rsa: # パスフレーズを入力
Identity added: /Users/username/.ssh/id_rsa (***@***)
さいごに
以上で公開鍵認証の設定完了。
※鍵ペアの中でも秘密鍵は得に重要です。
※秘密鍵の取り扱いには、くれぐれも注意してください。
Discussion