■ PC環境一覧
OS:Windows11
CPU:Intel® Core™ i9 13900KF
■ 初めに
公開鍵認証は、情報セキュリティを向上させるための強力な手段です。
この記事では、OpenSSHを使用して公開鍵認証を設定する方法に焦点を当てます。
パスワード認証よりも堅牢で、セキュリティを強化するために欠かせないテクニックとして、公開鍵認証はシステム管理者やユーザーにとって不可欠なスキルです。
手順を追いながら、安全で効果的な公開鍵認証の導入方法を解説し、デジタルセキュリティを向上させましょう。
■ 鍵について
公開鍵認証の基盤となる鍵の仕組みを理解することは重要です。
鍵は 2つの主要な部分で構成されます
□ 公開鍵
他のユーザーに公開され、暗号化されたデータを解読するための鍵です。
セキュアな通信を確保する際に使用され、外部に安全に公開できます。
公開鍵は、サーバーPCに配置します。
皆んなに見せてOKな鍵。
データを送る相手に渡すイメージ。
暗号化のために利用され、安全に共有できます。
□ 秘密鍵
所有者だけが知っている秘密の鍵で、データの署名や暗号化を解読するのに必要です。
絶対に他者に漏らさないように厳重に管理されるべきです。
秘密鍵は、クライアントPCに配置します。
持ち主だけが知っている鍵。
受け取ったデータを解読するのに必要。
これは厳重に秘匿されなければなりません。
ユーザーは「公開鍵」と「秘密鍵」と呼ばれる 2つの鍵を生成します。
公開鍵はサーバーに登録され、秘密鍵はユーザーのコンピュータに保存されます。
ログイン時には、ユーザーは秘密鍵を使用して署名を生成し、それをサーバーに送信します。
サーバーは受け取った署名を対応する公開鍵で検証し、成功した場合にのみログインを許可します。
これにより、秘密鍵そのものはネットワーク上に送信されず、通信の盗聴に対して強固なセキュリティが提供されます。
公開鍵認証の利点は、パスワード認証とは異なり、認証に必要な秘密情報がネットワーク上に明示的に送信されないことです。
また、署名は一時的で再利用不可能なため、盗まれても問題ありません。
この方式は通信の盗聴に対して堅牢であり、また秘密鍵を推測して偽造するのが非常に難しいため、セキュリティの観点からはパスワード認証よりも優れています。
さらに、秘密鍵を保護するために「パスフレーズ」を設定することも可能です。
パスフレーズは複数の単語から成るパスワードで、正しいパスフレーズを入力しない限り、秘密鍵はロックされて使用できません。
これにより、公開鍵認証はさらにセキュアに運用できます。
「公開鍵」の作成は、クライアントPCで作成し、サーバーPCへ転送することで登録(配置)します。
[1]鍵ペアを生成(公開鍵・秘密鍵)
□ オプション(頻繁に使用されるオプションを抜粋)
オプション | 説明 | おすすめ |
---|---|---|
-t | 暗号化形式 (暗号アルゴリズム) rsa, dsa, ecdsa, ed25519 デフォルトは、rsa形式です。 | rsa |
-b | 鍵のビット長 生成する鍵の bit数を指定します。 rsaのデフォルトは 2048bitです。 | 4096 |
-C | コメント付与 生成される公開鍵の末尾に追加されます。 指定しない場合は「< username >@<hostname >」が追加されます。 | 鍵管理のため付与するもしくは、他人と共有しなければならない場合には余計な情報となるので「-C " " 」と空白にしておくのも吉です。 |
下記「$ ssh-keygen
」コマンド実行後、対話形式で鍵の生成を進めます。
秘密鍵のファイル名に任意の名前を付ける場合の注意事項
上記で説明したように、秘密鍵を生成する際には任意のファイル名を付けることができます。
しかし、環境にもよります(私は他を知らない)が、公開鍵認証接続の設定完了後に「秘密鍵が見つかりません」とエラーが出ることがあります。
理由
(鍵種別にもよりますが)デフォルトで付けられる「id_rsa
」や「id_dsa
」等を秘密鍵として探すため、任意で付けた秘密鍵の名前を PCが把握していないので見つけることができずエラーとなります。
対処法
「$ ssh-agent
」コマンドを利用します。
上記コマンドから ssh-agentへ秘密鍵の場所を登録することで検索対象にします。
懸念点としては、ssh-agentを起動している間のみ有効です。
PCをシャットダウンした場合(や、新規ターミナルを開いた場合)再度、登録する必要があります。
しかし、秘密鍵の使い回すことで手間が省けますが、それにはリスクが伴うのでリスクヘッジを個人で徹底してください。
[1.1]生成
$ ssh-keygen -t rsa -b 4096 -C "comment"
---
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa): ← 秘密鍵の「ファイル名」を入力
Enter passphrase (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:
e1:c2:a3:d5:d1:45:13:95:db:d7:17:64:f1:c1:bb:ec comment
The key's randomart image is:
+--[ RSA 4096]----+
| .=+. |
| oo... |
| . N.. |
| . ++.+ |
| S + o. . |
| o o o o |
| * . . |
| + E |
| . |
+-----------------+
[2]公開鍵をサーバーPCへ配置
□「$ ssh-copy-id
」コマンドを使用する場合
[2.1]クライアントPCからサーバーPCへコピー配置
$ ssh-copy-id <username>@<hostname>
---
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
<username>@<hostname>'s password: ← サーバーPC(配置するユーザー)のパスワードを入力
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '<username>@<hostname>'"
and check to make sure that only the key(s) you wanted were added.
□ 手動にて公開鍵をサーバーPCへ配置する場合
※ PCが Windowsの場合は、Powershell(管理者権限)にて実行してください。
※ Powershellでも一部コマンドが使用できない場合はありますので、その際は GUI操作にてコメントの内容を対応してください。
[2.1]サーバーPCに公開鍵を配置するフォルダを生成
# ユーザーディレクトリへ移動
$ cd ~
#「.ssh」フォルダを作成
$ mkdir ~/.ssh/
[2.2]クライアントから「$ scp
」コマンドを使用して転送
# クライアントPCからサーバーPCへ公開鍵(id_rsa.pub)を転送
$ scp ~/.ssh/id_rsa.pub <username>@<hostname>:~/.ssh/
[2.3]サーバーPCに転送(配置)された公開鍵を修正
# 公開鍵(id_rsa.pub)が転送(配置)されたディレクトリへ移動
$ cd ~/.ssh/
# 公開鍵の名前を「id_rsa.pub」から『authorized_keys』へ変更
$ mv id_rsa.pub authorized_keys
# パーミッションの設定(Linuxユーザーのみ)
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
□「公開鍵認証ができない」または「SSH接続時にパスワードを聞かれる場合」の対処法
sshd
設定ファイル(sshd_config
)内の設定値を確認し、必要に応じて変更する。
公開鍵認証ができない(Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
)
「PubkeyAuthentication
」の値が「yes
」になっていることを確認(43行目付近)
< ---省略--- >
# 修正前
PubkeyAuthentication no
# 修正後
PubkeyAuthentication yes
< ---省略--- >
「Match Group administrators
」をコメントアウト(末尾付近)~/.ssh/authorized_keys
ではなく 管理者の administrators_authorized_keys
を参照していることが問題
< ---省略--- >
# 修正前
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
# 修正後
# Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
SSH接続時にサーバーPCのパスワードを聞かれる場合
「PasswordAuthentication
」の値が「no
」になっていることを確認(65行目付近)
< ---省略--- >
# 修正前
PasswordAuthentication yes
# 修正後
PasswordAuthentication no
< ---省略--- >
[3] SSH接続
□ configファイルを使用して接続(簡単接続)
[3.1]configファイル作成
「config
」ファイルを作成します。(SSH接続の情報を管理するファイル)
使用用途は、本来、SSH接続を行う時には「username
」や「hostname
」を入力しなければなりませんが、
configファイルに予め接続情報を記載しておくことで記載した情報に基づいて接続することができるため入力の手間を省くことができます。
下記コマンドを実行して「~/.ssh
」フォルダ内に「config
」ファイルを作成し、以下の内容を参考にパラメータを設定してください。
# configファイル作成
$ touch ~/.ssh/config
Host ssh-server
Hostname 127.0.0.1
User username
Port 22
IdentityFile ~/.ssh/id_rsa
[3.2]SSH接続確認
「config
」ファイルに設定した「Host」の名前を使用して接続することができます。
$ ssh ssh-server
□「config」ファイルがない場合の接続方法
[3.1]SSH接続確認
接続先(サーバーPC)の詳細な情報を入力して接続しなければなりません。
$ ssh <username>@<hostname>
■ 最後に
SSHの構築が、まだ済んでいない方は以下記事を参考ください。
お疲れ様でした。
comment 📝