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


32

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

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


2
ホストごとに異なるキーが必要なのはなぜですか?キーは、単一の管理ドメイン内のホスト間で共有することもできます。明らかに、作業用マシンに1つのキーを使用し、プライベートマシンに別のキーを使用しますが、作業中の各マシンに個別のキーを使用する背後にあるロジックは何ですか?
アレックスホルスト

@AlexHolst私は多くのキーを使用しています。内部インフラストラクチャ用に暗号化されたデフォルトのもの(パスワードを入力する必要があります)があります。暗号化されていない別のパスワード(パスワードなし)があり、エージェントを使用できず、毎分パスワードを入力したくない特定のサービスに使用しています。私たちの内部インフラストラクチャの一部ではない接続のための他のものがあります。だれかが公開鍵から秘密鍵を回復するのはかなり難しいはずですが、それはできるので、それは良い習慣です。例えば、Debian opensshバグは数年前に...-
Huygens

@HuygensいくつかのSSHキーを使用する必要があるという結論に至ったリスク分析ドキュメントを見たいのですが、クリアテキストキーを持っていることは問題ありません。リンクを投稿できますか?
アレックスホルスト

@AlexHolstのように「直接」である必要はありません。まず、私の答えは、複数のキーペアを持つ理由についてでした。いくつかあげたと思います。その後、私たちは皆、奇妙なことに対処しなければなりません。テストシステムがあり、SSHを介してデータをトンネリングしているアプリを使用できず、キーパスワードの入力を継続的に求められないため、ソフトウェアは使用できません。これは、バージョンの非互換性またはそうでないことに起因するバグのようです。SSHログインのメール通知を受け取りますが、そのボックスへのログインは1人だけです。したがって、リスクは許容できます。
ホイヘンス

回答:


31

これは、次のmanページによると予想される動作ですssh_config

 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

4
またssh -o "IdentitiesOnly true" -v -A user@host、キーを持たないマシンにログインするために使用するものを使用することもできますが、エージェント転送を提供したいと思います。(-v詳細なデバッグ用)。
eckes

1
@eckesそれは素晴らしいヒントですが、そうすべきではyesありませんtrueか?
aexl

IdentitiesOnly常に役立つとは限らない場合があります。具体的にはホストを除外する必要があります。superuser.com/questions/859661/を

38

他の人は構成ベースのソリューションでこれを示唆していますが、おそらく次のコマンドラインで一度だけ簡単にこれを行うことができることを指摘する価値があります:

ssh -o 'PubkeyAuthentication no' myhostname.mydomain

3
パーフェクト..ソリューションIMHO
drAlberT

1
正しい答えは受け入れられているはずです。
JMベッカー

11

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

特定のキーを使用して、共通ドメインにない多くのマシンに接続する場合は、自分のDNS内のすべてのCNAMEをそれらに与えることを検討してください。私はすべての顧客システムでこれを行います。


2

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

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

-1

ssh -i / path / to / keyを使用して特定のキーファイルをポイントすると、他のエージェントがエージェントにロードされている場合でもそのファイルのみが使用され、パスワードの入力は求められません。〜/ .ssh / configを編集して、次のような広告を表示することもできます...

ホストfoo.example.com
IdentityFile .ssh / id_rsa_foo.example.com

あなたもできる...

ホスト* .example.org
IdentityFile .ssh / id_rsa_example.org


これは、リストの最後にターゲットキーを追加するだけで、問題は解決しません。IdentitiesOnlyそれだけで。
ジョーレット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.