この投稿では、オフラインのセキュリティキーを使用してSSHホストに緊急アクセスする手順を開発します。これは1つの方法にすぎず、自分で調整できます。ホストのSSH CAをハードウェアセキュリティキーに保存します。このスキームは、シングルサインオンのSSHを含むほとんどすべてのOpenSSHで機能します。
なぜこれなのか まあ、これは最後の手段です。これは、何らかの理由で他に何も役に立たない場合にサーバーにアクセスできるようにするバックドアです。
緊急アクセスに公開鍵/秘密鍵の代わりに証明書を使用する理由は何ですか?
- , . , 1 5 . . .
- «» .
- , .
— , . - PIN-. , — . , , , USB- Yubikey 5. , . , . - .
- OpenSSH 8.2 , . Ubuntu 20.04 OpenSSH 8.2.
- (オプションですが望ましい)証明書を検証するためのCLIツール。
トレーニング
最初に、ハードウェアセキュリティキーに常駐する証明機関を作成する必要があります。キーを挿入して実行します。
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
コメント(-C)として、このCAがどのセキュリティキーに属しているかを忘れないように、yubikey-9-512-742 @ smallstep.comを指摘しました。
Yubikeyにキーを追加するほかに、2つのファイルがローカルで生成されます。
- セキュリティキーに格納されている秘密キーを参照するキー記述子であるsk-user-ca、
- sk-user-ca.pub。これはCAの公開鍵になります。
ただし、心配する必要はありません。Yubikeyには、取得できない別の秘密鍵があります。したがって、ここではすべてが信頼できます。
rootとしてのホストで、SSHD構成(/ etc / ssh / sshd_config)に以下を追加します(まだ追加されていない場合)。
TrustedUserCAKeys /etc/ssh/ca.pub
次に、ホストで公開鍵(sk-user-ca.pub)を/etc/ssh/ca.pubに追加
します。デーモンを再起動します。
# /etc/init.d/ssh restart
これで、ホストへのアクセスを試すことができます。しかし、最初に証明書が必要です。証明書に関連付けるキーペアを作成します。
$ ssh-keygen -t ecdsa -f emergency
証明書とSSHペア
公開鍵と秘密鍵のペアの代わりに証明書を使用したくなる場合があります。ただし、ユーザー認証の場合、1つの証明書では不十分です。各証明書には、秘密鍵も関連付けられています。これが、証明書を発行する前に、この「緊急」キーペアを生成する必要がある理由です。重要なのは、署名された証明書をサーバーに表示して、秘密鍵を持つ鍵のペアを示すことです。
したがって、公開鍵の交換はまだ生きています。証明書でも機能します。証明書は、サーバーが公開鍵を格納する必要性をなくすだけです。
次に、証明書自体を作成します。10分間隔でubuntuユーザー認証が必要です。あなたはそれをあなたのやり方で行うことができます。
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
指紋で証明書に署名するように求められます。-n ubuntu、carl、ec2-user
のように、カンマで区切ってユーザー名を追加できます。これで証明書が完成しました。次に、正しい権限を指定する必要があります。
$ chmod 600 emergency-cert.pub
その後、証明書の内容に慣れることができます。
$ step ssh inspect emergency-cert.pub
これは私のものです:
emergency-cert.pub
Type: ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate
Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Key ID: "test-key"
Serial: 0
Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
Principals:
ubuntu
Critical Options: (none)
Extensions:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rc
ここで公開鍵は作成した緊急鍵であり、CAはsk-user-caに関連付けられています。
SSHコマンドを実行する準備ができました。
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- これで、CAを信頼するホスト上のすべてのユーザーの証明書を作成できます。
- 緊急事態を取り除くことができます。sk-user-caを保持することもできますが、セキュリティキーにも含まれているため、必要はありません。緊急アクセスに使用した場合は、元のPEM公開鍵をホストから削除することもできます(たとえば、ubuntuユーザーの〜/ .ssh / authorized_keysにあります)。
緊急アクセス:アクションプラン
セキュリティキーを挿入して、次のコマンドを実行します。
$ ssh-add -K
これにより、CAの公開鍵と鍵記述子がSSHエージェントに追加されます。
次に、公開鍵をエクスポートして証明書を作成します。
$ ssh-add -L | tail -1 > sk-user-ca.pub
たとえば、有効期限が1時間以内の証明書を作成します。
$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub
そして再びSSHします:
$ ssh -i emergency username@host
.ssh / configファイルが接続の問題を引き起こしている場合は、-F noneオプションを指定してsshを実行し、それなしで実行できます。同僚に証明書を送信する必要がある場合、最も簡単で安全なオプションはMagic Wormholeです。これには2つのファイルのみが必要です-私たちの場合、これらは非常用と非常用の証明書.pubです。
このアプローチで気に入っているのは、ハードウェアサポートです。あなたは金庫にセキュリティキーを置くことができ、それらはどこにも行きません。
広告
EpicサーバーはAMDの強力なプロセッサーを搭載した安価なVPSで、CPUコア周波数は最大3.4 GHzです。最大構成では、ほぼすべての問題を解決できます-128 CPUコア、512 GB RAM、4000 GB NVMe。参加しませんか!