Ssh-agentとしてGPGを使用するようにsshを構成しましたが、~/.ssh
フォルダーを削除すると、gpgキーを使用してサーバーに正常にsshできます。ただし、私の~/.ssh
フォルダーには12を超える異なるsshキーがあり、そこにあるときにsshを実行しようとすると、sshクライアントが以前にディレクトリ内のすべての秘密キーを提供しているため、アクセス許可拒否エラーが発生します。 gpg ssh-agentでキーを試します。
通常のsshキーでは、~/.ssh/config
ファイルでIdentityFile
構成を使用するだけですが、自分のIDがgpg cardnoであるため、これを行うことはできません。 sshがエージェントよりもキーファイルを優先する理由に戸惑います。 sshにファイルの代わりにエージェントを使用させる方法はありますか?または、さらに良いことに、特定のサーバーでgpgキーを使用する必要があることを~/.ssh/config
ファイルで指定する方法はありますか?
ssh-agent
が実行されておらず、gpg-agent
が実行されていること、およびssh-add -L
がgpgキーが存在すること、および他の単一のsshスタイルの秘密キーを示していることを確認しました。
私の身元はgpgcardnoであるため、それはできません。
gnupgが提供するIDを使用しても、 can IdentityFile
およびIdentitiesOnly
を使用できます。
カードが存在する場合は、エージェントから公開鍵をエクスポートします。
$ ssh-add -L | grep "cardno:.*789$" | tee ~/.ssh/smartcard.pub
ssh-rsa AAAA[..]== cardno:023456000789
関連付けていないが関連付けられているキーを覚えている場合は、gnupgからエクスポートします。
$ gpg2 --export-ssh-key [email protected] | tee ~/.ssh/smartcard.pub
ssh-rsa AAAA[..]== openpgp:0xDEADBEEF
次に、そのエクスポートを使用して正しいキーを識別するようにsshに指示します。
Host *.Host.example
IdentityFile ~/.ssh/smartcard.pub
IdentitiesOnly yes
PasswordAuthentication no
PubkeyAuthentication yes
これにより、gnupgによって正しいスマートカードが検出されたときに、期待どおりに1回だけログインが試行されます。
$ ssh -v smart.Host.example
[..]
debug1: Next authentication method: publickey
debug1: Offering public key: /home/home/.ssh/smartcard.pub RSA SHA256:a1337[..] explicit
残念ながら、 gnupg ssh agent は挿入を要求しないため、カードを挿入し忘れると、 かなり役に立たない出力 が表示されます gpg agent のような正しいカードが行います。これは厄介ですが、実際の使用には影響しません。
man ssh_config
IdentityFileについて:
さらに、認証エージェントによって表されるすべてのIDが認証に使用されます。
だからあなたが設定するIdentityFile /dev/null
、その1つの認証が失敗すると、sshはエージェントでキーの試行に進みます。
キーがスマートカードなどのpkcs11対応ハードウェアに保存されている場合は、sshを直接使用してアクセスできます。
[〜#〜] cli [〜#〜]
-I pkcs11
Specify the PKCS#11 shared library ssh should use to communicate with a PKCS#11 token providing the user's private RSA key.
したがって、use ssh -I /path/to/opensc-pkcs11.so
を使用できます。opensc-pkcs11.soはスマートカードライブラリです。
エージェント
Ssh-agentを使用したい場合は、ssh-add -s /path/to/opensc-pkcs11.so
を使用して、スマートカードでバックアップされたキーを追加することもできます。
構成
そして最後に、設定ファイルを使用したい場合は、PKCS11デバイスを指定してPKCS11Provider
を使用できます。
PKCS11Provider
Specifies which PKCS#11 provider to use. The argument to this keyword is the PKCS#11 shared library ssh(1) should use to communi-
cate with a PKCS#11 token providing the user's private RSA key.