13

Githubにプライベートリポジトリがあり、3つのサブモジュールがあり、そのうち3つはすべてプライベートです。

EC2サーバーで4つのSSHキーを生成し、Githubデプロイキーとして4つのプライベートリポジトリすべてに適用しました。

SSHキーを認識するため、プライマリリポジトリのクローンを作成できます。「gitsubmoduleupdate」を実行すると、プライベートリポジトリで失敗し、次のエラーが発生します。

エラー:リポジトリが見つかりません。致命的:リモートエンドが予期せずハングアップしました

これらのプライベートリポジトリを手動でチェックアウトすると機能しますが、gitsubmoduleコマンドを使用すると機能しません。何か案が?これは完全にはサポートされていませんか?

4

1 に答える 1

11

githubの認証は少し奇妙です。ユーザー名は使用しません。彼らはあなたがどのユーザーであるかをあなたが提示した公開鍵に基づいて推測するだけです。4つのデプロイキーを生成したので、サーバーがgithubに接続するときにどれがサーバーによって使用されるかは誰にもわかりません。githubはそれらのいずれかを受け入れ、そのキーが登録されていないリポジトリへのアクセスを拒否します。

そのため、最も簡単な解決策は、すべてのリポジトリに単一のデプロイキーを使用することです。

ただし、それができない場合は、sshホストエイリアスを使用してこれを回避できます。~/.ssh/config次のようにサーバーのスタンザに追加します。

Host repo-foo
  HostName  ssh.github.com
  Port 443
  User git
  IdentityFile /path/to/my-ssh-key-file-for-foo
  IdentitiesOnly yes

Host repo-bar
  HostName ssh.github.com
  Port 443
  User git
  IdentityFile /path/to/my-ssh-key-file-for-bar
  IdentitiesOnly yes

次に、フォームを使用するのではなく、サブモジュールをポイントしますrepo-bar:username/bar.gitrepo-foo:username/foo.gitgit@github.com:...

これにより、gitとsshは各リポジトリを別のサーバー上にあるものとして効果的に扱い、明示的なIDファイルを渡すため、使用するキーについて混乱することはありません。

于 2012-05-17T06:17:28.773 に答える