web-dev-qa-db-ja.com

sshクライアントが見つけることができるすべての公開鍵を提供しないようにしますか?

ほとんどのシステム管理者と同様に、私はいつもopensshを使用しています。私は約12のssh鍵を持っています。ホストごとに異なるssh鍵を用意したいのです。しかし、これは初めてホストに接続するときに問題を引き起こし、私が持っているのはパスワードだけです。パスワードを使用してホストに接続したいのですが、この場合はsshキーを使用しません。ただし、sshクライアントはすべての公開鍵を~/.ssh/で提供します(ssh -vの出力を見るとわかります)。私はたくさんいるので、あまりにも多くの認証失敗のために切断されます。

Sshクライアントにすべてのsshキーを提供しないように指示する方法はありますか?

34
Rory

これは、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).

基本的に、IdentityFilesを指定すると、SSHエージェントがすでにクライアントに提示した現在のリストにキーが追加されます。

この動作を.ssh/configファイルの下部にある次のようにオーバーライドしてみてください。

Host *
  IdentitiesOnly yes

ホストレベルでこの設定を上書きすることもできます。例:

Host foo
  User bar
  IdentityFile /path/to/key
  IdentitiesOnly yes
33
Mathias Bynens

構成ベースのソリューションでこれをほのめかしている人もいますが、コマンドラインで次のコマンドラインを使用して簡単に1回のみ実行できることを指摘しておくとよいでしょう。

ssh -o 'PubkeyAuthentication no' myhostname.mydomain
38
Andrew Ferrier

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で与えることを検討してください。私はすべての顧客システムでこれを行います。

11

User23413のソリューションと同様に、特定のホスト(またはワイルドカードパターン)に対して公開鍵認証を完全に無効にすることができます。

Host *.example.org
RSAAuthentication no        # SSHv1
PubkeyAuthentication no     # SSHv2
2