web-dev-qa-db-ja.com

SSHエージェントから転送された特定のキーを使用しますか?

他のキーと一緒に、Githubのキーがあるとします。自宅のコンピューターAでsshエージェントに多くのキーを追加しました(ssh-add -Lは多くの行を返します)。私の.ssh/configで、どのホストでどのキーを使用するかを設定しました。

ssh -T -vvv [email protected] 2>&1 | grep Offering

与える

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

予想通り、提供されるキーは1つだけです。しかし、ForwardAgent yesを使用して一部のホストBにssh-ingし、同じコマンドを繰り返すと、

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.linode2
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.helium
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

つまり、すべてのキーを試します。サーバーがToo many authentication failuresを返す前に、限られた数のキーしか試行できないため、これは問題です。ホストBで.ssh/configを編集して、

Host github.com
  IdentityFile /Users/doxna/.ssh/id_rsa.github
  IdentitiesOnly yes

しかし、私は主要な提供物を入手しませんが、むしろ

debug2: key: /Users/doxna/.ssh/id_rsa.github ((nil))

これは、キーが見つからなかったことを意味します(?)そして、結局のところ、キーはホストBではなく、ホームコンピューターAにあるので、問題は、ホストBでそれを参照する方法ですか?私がなんとか質問を説明できたことを願っています。

30
danmichaelo

あなたは正しい考えを得ました。欠けているのは、IdentityFileが指すファイルが存在していることだけです。秘密鍵を含める必要はなく、公開鍵のみを使用するだけで十分です。

ホストBでは、ssh-add -L | grep /Users/doxna/.ssh/id_rsa.github > ~/.ssh/id_rsa.github.pubと入力してエージェントから公開鍵を抽出し、~/.ssh/configからそのファイルをポイントできます。

29
kasperd

@Kasperdからのいい答えですが、ホストBが危険にさらされている場合、またはroot権限でそれらすべてを信頼していない場合でも、ログに記録されている限り、すべてのキーが悪用される可能性があることに注意してください。そのホストに。

したがって、より良いアプローチは、必要なキーへのアクセスのみを転送することです。多分debian/Ubuntuリポジトリにあるssh-agent-filterを試すか、 github を試してください。

編集:キーを選択的に転送するためにssh-identではなくssh-agent-filterを選択しましたが、期待するほどスムーズなエクスペリエンスではありません。

5
mc0e