1. はじめに
linuxのSSHサーバに2段階認証を設定していたのですが、VSCodeからのSSH接続を利用したところ、2段階認証で挫折した為、証明書を利用したSSHサーバ接続の設定を追加で行いました。
インストールは以下コマンドで実施します。
$ sudo apt-get install openssh-server
2. 証明書を利用したSSH接続の設定の流れ
SSH接続に証明書を利用する設定は以下の流れで行います。
- サーバにSSH接続したいクライアントで鍵生成(公開鍵と秘密鍵) (*クライアント側で鍵生成を行えない場合は、サーバ側で鍵生成してクライアントに秘密鍵を渡す事も可能であるが、秘密鍵流出の観点から避けた方が良い。)
- SSH接続したいクライアントで生成した公開鍵をサーバへ送信
- サーバ側で受信した公開鍵を認証済みの鍵として登録
- SSHサーバで公開鍵認証を有効にする
- SSHサーバで公開鍵認証が有効になっていることを確認
- SSHサーバを再起動
- 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 | 大きいサイズ推奨 | 互換性重視 |
生成される鍵ファイルは以下に配置されます。
| 種類 | パス |
|---|---|
| 秘密鍵 | [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クライアントから接続情報とともに秘密鍵を利用してサーバへ接続します。