25

おそらく簡単な質問ですが、私はここで途方に暮れています...

githubでは、リポジトリごとにデプロイメントキーを追加して、その単一のリポジトリへのアクセスのみを許可できます。

しかし、1つのクライアントについて、同じサーバー上でgitを使用して管理されている2つのプロジェクト(プロジェクトAとプロジェクトB)があります。プロジェクトAの公開鍵を使用する場合、githubは、プロジェクトBの展開鍵として使用できないことを通知します。その逆も同様です。

別の公開鍵を作成し、プロジェクトAに1つの鍵を使用し、プロジェクトBにもう1つの鍵を使用するようにgitを設定するにはどうすればよいですか?

4

2 に答える 2

48

これsshを行う方法は、を使用して~/.ssh/config、ホスト名エイリアスを作成し、両方のプロジェクトで異なるホスト名を使用してgithubにアクセスすることです。git config(またはgit remote)方法があるかどうかもわかりません。

Host a.github.com
HostName github.com
User git
IdentityFile ~/.ssh/project-a-id_rsa

Host b.github.com
HostName github.com
User git
IdentityFile ~/.ssh/project-b-id_rsa

次に、a.github.com:user/project-a.gitまたはb.github.com:user/project-b.git(または同様の)をリポジトリURLとして使用します。

于 2011-03-06T13:33:54.840 に答える
2

alice2つ以上のプライベートリポジトリを持つgithub.comユーザーであるとしましょうrepoNrepo1この例では、とという名前の2つのリポジトリのみを使用します。repo2

https://github.com/alice/repo1

https://github.com/alice/repo2

おそらくサーバーまたは複数のサーバーでパスワードを入力せずに、これらのリポジトリからプルする必要があります。git pull origin masterたとえば、実行したいのですが、パスワードを要求せずにこれを実行したいとします。

~/.ssh/configssh-agentを扱うのが好きではなく、ホスト名とユーザー名に応じて使用する秘密鍵をsshクライアントに知らせるファイルについて発見しました(または今発見しています)。次のような単純な構成エントリを使用します。これ:

Host github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/alice_github.id_rsa
  IdentitiesOnly yes

そこで、先に進んで(alice_github.id_rsa, alice_github.id_rsa.pub)キーペアを作成し、次にリポジトリの.git/configファイルに移動して、リモートのURLを次のように変更しましたorigin

[remote "origin"]
        url = "ssh://git@github.com/alice/repo1.git"

そして最後に、リポジトリSettings > Deploy keysセクションに移動して、のコンテンツを追加しましたalice_github.id_rsa.pub

この時点でgit pull origin master、パスワードを入力せずに問題なく実行できます。

しかし、2番目のリポジトリはどうですか?

したがって、本能はそのキーを取得してrepo2のデプロイキーに追加することですが、github.comはエラーになり、キーがすでに使用されていることを通知します。

次に、別のキーを生成します(ssh-keygen -t rsa -C "alice@alice.com"もちろん、パスワードなしで使用します)。これが混乱しないように、キーに次のような名前を付けます。

  • repo1キーペア:(repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
  • repo2キーペア:(repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)

これで、新しい公開鍵repo2をgithub.comののDeploy keys構成に配置しますが、sshの問題に対処する必要があります。

github.comリポジトリが同じドメインでホストされている場合、sshはどのキーを使用するかをどのように判断できますか?

.ssh/configファイルがポイントしgithub.comていて、プルを実行するときに使用するキーがわかりません。

だから私はgithub.comでトリックを見つけました。sshクライアントに、各リポジトリが異なるgithub.comサブドメインに存在することを伝えることができます。これらの場合、それらrepo1.github.comrepo2.github.com

したがって、最初.git/configにリポジトリクローンのファイルを編集するので、代わりに次のようになります。

repo1の場合

[remote "origin"]
        url = "ssh://git@repo1.github.com/alice/repo1.git"

repo2の場合

[リモート"origin"]url = "ssh://git@repo2.github.com/alice/repo2.git"

そして、.ssh/configファイルに、各サブドメインの構成を入力できるようになります:)

Host repo1.github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa
  IdentitiesOnly yes

Host repo2.github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa
  IdentitiesOnly yes

git pull origin masterこれで、両方のリポジトリからパスワードを入力せずに入力できるようになりました。

複数のマシンがある場合は、各マシンにキーをコピーして再利用できますが、マシンとリポジトリごとに1つのキーを生成するようにレッグワークを実行することをお勧めします。処理するキーはもっとたくさんありますが、1つが危険にさらされても、脆弱性は低くなります。

于 2014-10-22T12:38:43.243 に答える