no image

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

1. はじめに

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

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 -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/******/.ssh/id_rsa): <- 秘密鍵の保存パス
Enter passphrase (empty for no passphrase):  <- 秘密鍵を利用する際に求められるパスワード。そのままEnterすると、セキュリティ上推奨されないが、パスワードは要求されない。
Enter same passphrase again:   <- 同じパスワードを入力
Your identification has been saved in /Users/******/.ssh/id_rsa.
Your public key has been saved in /Users/******/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:***************************************** [email protected]

OpenSSH 6.5以降のSSHサーバであればED25519というRSAより暗号強度の強いアルゴリズムも選択可能です。

SSHのバージョンを確認

$ sudo ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

ED25519の鍵ペアを生成

$ ssh-keygen -t ed25519

3-2. SSH接続したいクライアントで生成した公開鍵をサーバへ送信

SCPコマンドを用いてリモートサーバへ公開鍵を送信

$ scp -P [ssh-server-port] ~/.ssh/id_rsa.pub [ssh-user]@[server-ip]:/home/[ssh-user-home]

3-3. サーバ側で受信した公開鍵を認証済みの鍵として登録

受信した公開鍵をログインユーザのauthorized_keyファイルへ登録

$ cat id_rsa.pub >> /home/[ssh-user-home]/.ssh/authorized_keys

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

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

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

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

$ sudo systemctl restart sshd

3-6. SSHサーバへ接続

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

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