異なるユーザー名によるエージェント転送 (Git およびデプロイメント)

異なるユーザー名によるエージェント転送 (Git およびデプロイメント)

この質問は Git に直接関係するものではありませんが、Git がサポートしているトランスポートの 1 つが SSH であり、エージェント転送を使用しようとしているため、説明を求めようと思いました (man ページでは説明が不十分でした)。

私は Capistrano を使用してソフトウェアの展開を自動化しようとしています。いくつかの問題点 (展開前の既知のホストの事前シードなど) を回避することができましたが、次のような状況が残っています。

私のチームは、自分自身として、個々のユーザー アカウントでサーバーにログインし、全員がグループに所属しdevelopersumaskです002。上記のいずれも、スーパー ユーザー権限を必要とせずに、チームが常に自分自身として作業できるようにすることを目的としていることを除けば、実際には関係ありません。

example.com次のようにしてサーバーに接続します~/.ssh/config

Host example.com
  User beaks
  ForwardAgent yes
  IdentityFile ~/.ssh/id_rsa_business

最初のログインは完璧に機能し、ssh example.comユーザー アカウントへの接続が開き、すべてが正常です。

問題は次のステップで起こります。

git ls-remote [email protected]:project/repository.git

これは前述の Git+SSH トランスポート層 (上記のリンクを参照) を使用しており、通常は転送エージェント キー (存在することを確認しましたenv | grep SSH_AUTH_SOCK)を使用する必要があります。

応答は単純に「認証に失敗しました (公開キー)、相手側が予期せず電話を切りました」です。github.com共有gitユーザーとしてアクセスしたときに、自分のユーザーのエージェントが使用されていないためだと思われます。

また、異常な状況 (セキュリティ ポリシーなど) の可能性も排除できませんEC2が、その場合、タイムアウトまたは接続障害が発生すると予想されます。私は、自分が接続していることにかなり自信を持っています。また、エージェントがユーザー用のキーgithub.comを提供していないため、接続が許可されていないと考えています。beaksgit

何か見逃した点があれば、喜んで追加情報を追加します。

答え1

ssh-agent が実行中であることを確認するだけでは不十分です。必要なキーが存在するかどうかを確認してください。このキーが他のホストから機能することを確認しましたか?そのシステムではssh-add -L 何が印刷されますか?ssh-add -L

を実行することもできます。実行GIT_TRACE=1 git ls-remote ...すると、実行される ssh コマンドが出力されます。git を導入する前に、手動で ssh コマンドを実行して動作させることができます。

答え2

この質問に実際に答えた人は誰もいなかったそのため、ここに来る人々は、同様の質問に対する私の回答を見ることで利益を得るかもしれません。https://superuser.com/a/1141035/3376

関連情報