SSH接続に証明書を利用するサーバ設定

1. はじめに

linuxのSSHサーバに2段階認証を設定していたのですが、VSCodeからのSSH接続を利用したところ、2段階認証で挫折した為、証明書を利用したSSHサーバ接続の設定を追加で行いました。

インストールは以下コマンドで実施します。

$ sudo apt-get install openssh-server

2. 証明書を利用したSSH接続の設定の流れ

SSH接続に証明書を利用する設定は以下の流れで行います。

  1. サーバにSSH接続したいクライアントで鍵生成(公開鍵と秘密鍵) (*クライアント側で鍵生成を行えない場合は、サーバ側で鍵生成してクライアントに秘密鍵を渡す事も可能であるが、秘密鍵流出の観点から避けた方が良い。)
  2. SSH接続したいクライアントで生成した公開鍵をサーバへ送信
  3. サーバ側で受信した公開鍵を認証済みの鍵として登録
  4. SSHサーバで公開鍵認証を有効にする
  5. SSHサーバで公開鍵認証が有効になっていることを確認
  6. SSHサーバを再起動
  7. SSHサーバへ接続

3. 設定

3-1. サーバにSSH接続したいクライアントで鍵生成(公開鍵と秘密鍵)

以下では暗号化方式はRSA、4096bit長で公開鍵ペアを生成します。

$ ssh-keygen -t rsa -b 4096

-tで指定できる鍵の種類にはそれぞれに特徴があります。

鍵タイプ セキュリティ 速度 鍵サイズ 特徴
ed25519 4 5 小さい 暗号強度と処理速度のバランスが良い。標準
ed25519-sk 5 4 小さい ハードウェア鍵(FIDO/U2F)の利用必須
ecdsa-sk 4 4 小さい ハードウェア鍵を利用したいがed25519-skを採用できない場合の代替
rsa 3(キー長に依存) 2 大きいサイズ推奨 互換性重視

ssh-keygen manual

生成される鍵ファイルは以下に配置されます。

種類 パス
秘密鍵 [user-home-directry]/.ssh/id_rsa
公開鍵 [user-home-directry]/.ssh/id_rsa.pub

3-2. SSHサーバで公開鍵認証を有効にする

SSH設定ファイルで公開鍵認証を有効にする。デフォルトで利用可能となっている為、通常は特に設定不要である。

$ vi /etc/ssh/sshd_config
$ sudo grep -e PubkeyAuthentication -e AuthorizedKeysFile /etc/ssh/sshd_config
#PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

3-3. SSHサーバを再起動

$ sudo systemctl restart sshd

3-4. SSHサーバへ接続

公開鍵を生成したユーザで起動したシェルからSSHコマンドで接続(linux/mac系osの場合)

$ ssh [ssh-user]@[server-ip] -p 22

3-5. 外部からSSHサーバへ接続

  • 外部から接続する際は、生成した秘密鍵を接続するSSHクライアントに安全な方法で送信し、SSHクライアントから接続情報とともに秘密鍵を利用してサーバへ接続します。