SSH サーバへの接続を公開鍵認証ではなく証明書認証で行うこと。
↓作業手順はこのドキュメントがわかりやすい。
手順
sudo ssh-keygen -f /etc/ssh/ca
sudo ssh-keygen -s /etc/ssh/ca \ -I "$(whoami)@$(hostname --fqdn) user key" \ -n "$(whoami)" \ -V -5m:+3650d \ ~/.ssh/id_rsa.pub
IP アドレス制限を設ける場合
sudo ssh-keygen -s /etc/ssh/ca \ -I "$(whoami)@$(hostname --fqdn) user key" \ -n "$(whoami)" \ -V -5m:+3650d \ -O source-address=$(hostname -I | tr ' ' ',') \ ~/.ssh/id_rsa.pub
echo "AuthorizedPrincipalsFile %h/.ssh/authorized_principals" | sudo tee -a /etc/ssh/sshd_config echo "TrustedUserCAKeys /etc/ssh/ca.pub" | sudo tee -a /etc/ssh/sshd_config echo $(whoami) > ~/.ssh/authorized_principals sudo systemctl restart ssh.service
ポイント
- CA の鍵ペアを作る
- CA の秘密鍵でクライアントの公開鍵に署名して証明書を作る
- クライアントが証明書を利用して SSH する際は
ssh -i
で秘密鍵を指定する- 証明書を秘密鍵と同じディレクトリに置くこと
azureuser@ssh-client:~$ ll ~/.ssh/ total 28 drwx------ 2 azureuser azureuser 4096 Mar 1 15:04 ./ drwxr-xr-x 5 azureuser azureuser 4096 Mar 1 15:04 ../ -rw------- 1 azureuser azureuser 553 Mar 1 14:52 authorized_keys -rw------- 1 azureuser azureuser 1679 Mar 1 14:55 id_rsa -rw-r--r-- 1 azureuser azureuser 1503 Mar 1 15:00 id_rsa-cert.pub -rw-r--r-- 1 azureuser azureuser 402 Mar 1 14:55 id_rsa.pub -rw-r--r-- 1 azureuser azureuser 222 Mar 1 15:04 known_hosts
↑こういうファイル配置なら -i オプションなしで良い。
$ ssh azureuser@192.168.x.x
参考リンク
- SSH CA認証まとめ 網羅的で丁寧な解説
- Using a CA with SSH ポイントを抑えた簡潔な手順