ほとんどのシステム管理者と同様に、私はいつもopensshを使用しています。私は約12のssh鍵を持っています。ホストごとに異なるssh鍵を用意したいのです。しかし、これは初めてホストに接続するときに問題を引き起こし、私が持っているのはパスワードだけです。パスワードを使用してホストに接続したいのですが、この場合はsshキーを使用しません。ただし、sshクライアントはすべての公開鍵を~/.ssh/
で提供します(ssh -v
の出力を見るとわかります)。私はたくさんいるので、あまりにも多くの認証失敗のために切断されます。
Sshクライアントにすべてのsshキーを提供しないように指示する方法はありますか?
これは、ssh_config
のmanページによると予想される動作です。
IdentityFile
Specifies a file from which the user's DSA, ECDSA or DSA authentica‐
tion identity is read. The default is ~/.ssh/identity for protocol
version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and ~/.ssh/id_rsa for
protocol version 2. Additionally, any identities represented by the
authentication agent will be used for authentication.
[...]
It is possible to have multiple identity files specified in configu‐
ration files; all these identities will be tried in sequence. Mul‐
tiple IdentityFile directives will add to the list of identities
tried (this behaviour differs from that of other configuration
directives).
基本的に、IdentityFile
sを指定すると、SSHエージェントがすでにクライアントに提示した現在のリストにキーが追加されます。
この動作を.ssh/config
ファイルの下部にある次のようにオーバーライドしてみてください。
Host *
IdentitiesOnly yes
ホストレベルでこの設定を上書きすることもできます。例:
Host foo
User bar
IdentityFile /path/to/key
IdentitiesOnly yes
構成ベースのソリューションでこれをほのめかしている人もいますが、コマンドラインで次のコマンドラインを使用して簡単に1回のみ実行できることを指摘しておくとよいでしょう。
ssh -o 'PubkeyAuthentication no' myhostname.mydomain
James Sneeringerのソリューションに従って、次の行に沿ってssh_configを設定したい場合があります。
Host *.mycompany.com
IdentityFile .ssh/id_dsa_mycompany_main
Host *.mycustomer.com
IdentityFile .ssh/id_dsa_mycustomer
Host *
RSAAuthentication no #this should be up top, avoid ssh1 at all costs
PubkeyAuthentication no
共通のドメインにない多くのマシンに特定のキーで接続する場合は、それらにすべてのCNAMEを自分のDNSで与えることを検討してください。私はすべての顧客システムでこれを行います。
User23413のソリューションと同様に、特定のホスト(またはワイルドカードパターン)に対して公開鍵認証を完全に無効にすることができます。
Host *.example.org
RSAAuthentication no # SSHv1
PubkeyAuthentication no # SSHv2