1. はじめに
linuxのSSHサーバに2段階認証を設定していたのですが、VSCodeからのSSH接続を利用したところ、2段階認証で挫折した為、証明書を利用したSSHサーバ接続の設定を追加で行いました。
2. 証明書を利用したSSH接続の設定の流れ
SSH接続に証明書を利用する設定は以下の流れで行います。
- サーバにSSH接続したいクライアントで鍵生成(公開鍵と秘密鍵)
(*クライアント側で鍵生成を行えない場合は、サーバ側で鍵生成してクライアントに秘密鍵を渡す事も可能であるが、秘密鍵流出の観点から避けた方が良い。) - SSH接続したいクライアントで生成した公開鍵をサーバへ送信
- サーバ側で受信した公開鍵を認証済みの鍵として登録
- SSHサーバで公開鍵認証を有効にする
- SSHサーバで公開鍵認証が有効になっていることを確認
- SSHサーバを再起動
- 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