@kyanny's blog

My thoughts, my life. Views/opinions are my own.

SSH CA

SSH サーバへの接続を公開鍵認証ではなく証明書認証で行うこと。

↓作業手順はこのドキュメントがわかりやすい。

support.conoha.jp

手順

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

参考リンク