281

2つの異なるSSHキー/GitHubアカウントをうまく連携させるのに問題があります。私は次の設定をしています:

を使用して1つのアカウントからアクセス可能なリポジトリgit@github.com:accountname

を使用して別のアカウントからアクセス可能なリポジトリgit@github.com:anotheraccount

各アカウントには独自のSSHキーがあります。両方のSSHキーが追加され、構成ファイルを作成しました。しかし、設定ファイルが正しいとは思いません。git@github.com:accountnameを使用してアクセスするリポジトリがを使用する必要があることid_rsa、およびgit@github.com:anotheraccountを使用する必要があることを指定する方法がよくわかりませんid_rsa_anotheraccount

4

12 に答える 12

349

Andy Lester の回答は正確ですが、これを機能させるために必要な重要な追加の手順を見つけました。個人用と仕事用の 2 つのプロファイルを設定しよう~/.ssh/configとして、おおよそ次のようになりました。

Host me.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/me_rsa

Host work.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/work_rsa

仕事用プロファイルは、ssh-add ~/.ssh/work_rsa. その後、github への接続で正しいプロファイルが使用されました。以前は、最初の公開鍵がデフォルトでした。

使用時に認証エージェントへの接続を開くことができませんでした: https://stackoverflow.com/a/17695338/1760313ssh-addを確認してください。

于 2011-12-13T03:25:00.127 に答える
48

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

https://github.com/alice/repo1

https://github.com/alice/repo2

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

あなたは ssh-agent を扱うのが好きではありません。~/.ssh/configホスト名とユーザー名に応じて使用する秘密鍵を 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の Deploy キーに追加することですが、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 でトリックを見つけました。各リポジトリが異なる github.com サブドメインにあることを ssh クライアントに伝えることができますrepo1.github.comrepo2.github.com

そのため、最初にレポ クローンのファイルを編集し.git/configます。代わりに、次のようになります。

レポ1の場合

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

repo2 の場合

[remote "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:06.137 に答える
19

:のIdentityFileパラメータを使用します~/.ssh/config

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/github.rsa
    User petdance
于 2010-07-12T04:30:04.147 に答える
8

(他のすべての回答で提案されているように)ssh構成ファイルを編集するより簡単な代替手段は、異なる(デフォルト以外の)sshキーを使用するように個々のリポジトリを構成することです。

別のキーを使用するリポジトリ内で、次を実行します。

git config core.sshCommand 'ssh -i ~/.ssh/id_rsa_anotheraccount'

鍵がパスフレーズで保護されていて、毎回パスワードを入力したくない場合は、それを ssh-agent に追加する必要があります。ubuntuの場合は次のように、macOSの場合は次のようにします。

グローバル git config と条件付きインクルードを使用して、このアプローチを複数のリポジトリにスケーリングすることも可能です (例を参照)。

于 2018-06-07T17:08:57.173 に答える
4

私の場合、上記の解決策はどれも私の問題を解決しませんでしたが、ssh-agent は解決しました。基本的に、私は次のことを行いました:

  1. 以下に示す ssh-keygen を使用して鍵ペアを生成します。キーペアを生成します (この例では.\keyfile.\keyfile.pub)

    ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfile

  2. keyfile.pubgit プロバイダーにアップロードする

  3. マシンで ssh-agent を開始します (ps -ef | grep ssh-agentすでに実行されているかどうかを確認できます) 。
  4. ssh-add .\keyfile資格情報を追加するために実行します
  5. これで実行できますgit clone git@provider:username/project.git
于 2016-01-26T02:57:54.640 に答える
3

@stefano の回答の補足として、-f別のアカウントの新しい SSH キーを生成するときにコマンドを使用することをお勧めします。

ssh-keygen -t rsa -f ~/.ssh/id_rsa_work -C "your@mail.com"

id_rsa_workfile は path に存在しないため、この~/.ssh/ファイルを手動で作成しましたが、機能しません:(

于 2015-03-28T09:01:02.410 に答える
2

私が使った、

Host github.com
   HostName github.com
   IdentityFile ~/.ssh/github_rsa
   User abc@gmail.com

うまくいきました。

さまざまなユーザー名のさまざまな rsa キーに対して、.ssh/config ファイルで上記の設定を使用します。

于 2013-07-17T17:10:31.927 に答える
2

これらに対処するために使用するテクニックをここに投稿しました

于 2012-03-04T03:45:16.917 に答える