AgentForwardingの使用中にssh_configでIdentityFileディレクティブを使用する


15

.ssh / configのIdentityFileディレクティブを使用して転送されたキーを指定することは可能ですか?

実稼働サーバーでCapistrano / GITを介してコードを展開しようとしたときに、この奇妙なことに遭遇しました。個人用と仕事用の両方のGITキーが常にSSHエージェントにロードされ、個人用キーが最初にエージェントに追加されたことが起こりました。Capistranoでデプロイする場合、エージェント転送を使用するため、ホストが「git pull」操作を認証しようとしたときに、次のエラーで失敗しました。

エラー:「一部のレポ」へのアクセス許可が「ユーザー」に拒否されました。

なぜなら、適切なキー(後でsshエージェントに付属)を試す前に、個人のgitキーを使用して認証を試み、アクセスする権限のない外部リポジトリにアクセスしていると想定していたためです。個人ユーザーにすべての作業リポジトリへのアクセスを許可することもできますが、ローカルマシンでは、.ssh / configで次のようにカスタムドメインを定義することでこの問題を回避できます。

ホスト personal.github.com
ホスト名 github.com
ユーザー git
IdentityFile〜 / .ssh / some_key

ホスト work.github.com
ホスト名 github.com
ユーザー git
IdentityFile〜 / .ssh / some_other_key

そして、このようにgitは決して混乱しません。私のプロダクションボックスで転送されたキーの.ssh / configルールを作成して、新しいコードをプルするときに使用するキーを常に認識できるようにすることは可能ですか?基本的に私ができるようにしたい:

ホスト work.github.com
ホスト名 github.com
ユーザー git
IdentityFile some_forwarded_key

ありがとう!

回答:


22

キーの公開部分を使用して、転送されたエージェントから使用する秘密キーを指定できます。これには、「中間」マシン(ローカルssh-agentを転送するマシン)で追加のファイル(キーの公開部分)を作成する必要があります。

  1. 中間マシンが希望するキーの公開部分のコピーを便利な場所(たとえば~/.ssh/some_other_key.pub)に持つようにします。

    キーの公開部分を既に持っているマシンから:

    scp some_other_key.pub intermediate:.ssh/
    

    または、中間マシンで:

    ssh-add -L | grep something_unique > ~/.ssh/some_other_key.pub
    

    公開キーの末尾の「コメント」部分を編集して、キーの発信元/所有者/目的をより適切に識別する(または同じものを隠そうとする)ことができます。

  2. -iまたはで上記の公開キーファイルへのパス名を使用しますIdentityFile

  3. また、IdentitiesOnly yes.ssh/configまたは-o)を使用して、sshが転送されたエージェントから追加のIDを提供しようとしないようにする必要があります。


これは、他の10のソリューションから私のために働いた唯一のものです。
トレーシーフー

1
これを使って、使用したい秘密鍵に関連付けられた公開鍵を中間マシンの〜/ .ssh / id_rsa.pubに置くと、デフォルトで使用され、〜/に設定する必要がないことに気付きました。 .ssh / config。
bschlueter

クリスとbschlueterに感謝します!ssh someserver -t "ssh-add -L | grep something_unique>〜/ .ssh / id_rsa.pub; cd some / other / folder; bash --login"
-blablabla

ssh -v -T ...サーバーでこれを試してみると、公開鍵は受け入れられますが、sshが言ってNo such identity: /home/name/.ssh/id_rsa: No such file or directory、その後認証が失敗します。すべての設定でForwardAgentが有効になっています。何が問題なのでしょうか?
ラースニスト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.