設定 - SSHの公開鍵認証
概要
パスワードでのログインはランダムで試すことで突破されることもあるので、セキュリティを向上させるため公開鍵認証を行う。
公開鍵認証は秘密鍵を持つ人だけがログイン出来るようになる設定である。
公開鍵と秘密鍵の作成
RHEL / SUSE / Raspberry Pi
RHEL、SUSE、Raspbianには、標準でOpenSSHがインストールされている。
秘密鍵と公開鍵を作成する。
-t
オプション- 指定しない場合、RSAアルゴリズムを使用した2048ビットの鍵ペアが生成される。
- 異なるアルゴリズム(例: ed25519)や鍵サイズを使用する場合は、
-t
(タイプ)オプションと-b
(ビット数)オプションを指定する。
-f
オプション- 特定のファイル名やディレクトリで鍵ペアを保存する場合は、
-f
オプションを使用してファイル名を指定する。 - 指定しない場合、生成された鍵ペアは、デフォルトでは次のファイルに保存される。
- 公開鍵: ~/.ssh/id_rsa.pub
- 秘密鍵: ~/.ssh/id_rsa
- 特定のファイル名やディレクトリで鍵ペアを保存する場合は、
-N
オプション- パスフレーズを設定する場合、鍵生成時に対話式で設定する、または、
-N
オプションを使用して設定する。
- パスフレーズを設定する場合、鍵生成時に対話式で設定する、または、
ssh-keygen -t rsa -b 4096 # 公開鍵および秘密鍵の入力 Generating public/private rsa key pair. Enter file in which to save the key (/home/${ユーザ名}/.ssh/id_rsa): # 空(標準ディレクトリ)または任意のパスを入力 Enter passphrase (empty for no passphrase): # パスフレーズを入力(空の場合はパスフレーズ無しとなる) Enter same passphrase again: # パスフレーズを再入力 Your identification has been saved in /home/${ユーザ名}/.ssh/id_rsa. Your public key has been saved in /home/${ユーザ名}/.ssh/id_rsa.pub. The key fingerprint is: SHA256:KUTA1tKak8l0ibHGqq4XWOPgRKfyRCfeBGxrWssdPoY ssh_client The key's randomart image is: +---[RSA 4096]----+ | ..oo*.. | | .=oOo= | |.+oX+B. | |ooOoX. . | |+%.* o. S | |ooE = . | |. o . | |. . | |oo | +----[SHA256]-----+
Windows
Windows 10には、標準でOpenSSHがインストールされているが、ここでは、TeraTermを使用する。
TeraTermを起動して、[設定]-[SSH鍵生成] をクリックする。
[鍵の種類]はRSAを選択する。
[ビット数]は2048を入力して、[生成]ボタンを押下すると、鍵を生成しましたと出力される。
[鍵のパスフレーズ]と[パスフレーズの確認]にパスワードを入力する。
[公開鍵の保存](id_rsa.pubファイル)と[秘密鍵の保存](id_rsaファイル)をクリックして、
それぞれの鍵をクライアントPCの任意のフォルダに保存する。
※注意
鍵のパスフレーズ無しの場合は秘密鍵だけでログインする。
この設定完了後に秘密鍵(id_rsa)を紛失するとログイン出来なくなるため気をつけること。
また、秘密鍵が第三者に漏洩すると、ラズパイにログインされてしまうので厳重に保管すること。
公開鍵の設定
SSHサーバのホームディレクトリに.sshディレクトリを作成して、パーミッションを変更する。
mkdir ~/.ssh chmod 700 ~/.ssh
.sshディレクトリ内に、公開鍵ファイルであるauthorized_keysファイルを作成する。
touch ~/.ssh/authorized_keys
上記のセクションで生成したid_rsa.pubファイル(公開鍵ファイル)の内容を、authorized_keysファイルにコピーする。
nano ~/.ssh/authorized_keys または cat id_rsa.pub >> ~/.ssh/authorized_keys
authorized_keysファイルのパーミッションを変更する。
chmod 600 ~/.ssh/authorized_keys
SSHの設定
rootユーザのログインの禁止
SSH接続時、rootユーザでのログインを禁止するため、以下のコマンドを実行する。
sudo nano /etc/ssh/sshd_config
最下行に以下の設定を追記する。
PermitRootLogin no
公開鍵のログインの設定
以下のコマンドを入力して、sshd_configファイルを開く。
sudo nano /etc/ssh/sshd_config
パスワード認証を不可にするため、PasswordAuthenticationをnoに変更する。
公開鍵認証を可能にするため、PubkeyAuthenticationをyesに変更する。
設定を有効にするため、SSHを再起動する。
sudo systemctl restart sshd
これにより、パスワードでのログインができなくなり、秘密鍵を持っているユーザだけがログインできる。
SSH Agent
SSH Agentとは、公開鍵認証方式において、事前に秘密鍵を登録することにより、ssh
コマンドの実行時に自動的に秘密鍵を適用して認証処理を行うツールである。
これにより、認証時のパスフレーズの入力は、秘密鍵の登録時に1度行うだけで済む。
ssh-agent
コマンドの使用方法を、下表に示す。
ssh-addコマンド | 意味 |
---|---|
ssh-add <秘密鍵ファイルのパス> | 秘密鍵を登録する。 |
ssh-add -l | 登録されている鍵のFingerprints一覧を表示する。 |
ssh-add -L | 登録されている鍵の公開鍵一覧を表示する。 |
ssh-add -d <秘密鍵ファイルのパス> | 登録されている鍵を削除する。 |
ssh-add -D | 登録されている全ての鍵を削除する。 |
ターミナル等から接続
RLoginやTera Termを使用せずに、ターミナル等からSSH接続する場合は、以下のようなコマンドを実行する。
ssh -p <ポート番号> -i /<秘密鍵を保存しているディレクトリ>/id_rsa <ユーザ名>@<ホスト名またはIPアドレス>
上記のようなコマンドを簡潔に記述する場合、クライアントに~/.ssh/configファイルを作成する。
vi ~/.ssh/config # ~/.ssh/configファイル Host <任意の名前> # ホスト名 HostName <ホスト名またはIPアドレス> # ポート番号 Port <ポート番号> # ユーザー名 User <サーバのユーザ名> # 暗号鍵ファイルのパス IdentityFile <暗号鍵ファイルのパス>
以下のように、コマンドを簡潔に記述できる。
ssh <任意の名前>