web-dev-qa-db-ja.com

複数のGitHubアカウントとSSH構成

2つの異なるSSHキー/ GitHubアカウントをうまく連携させるのに苦労しています。次のセットアップがあります。

[email protected]:accountnameを使用して1つのアカウントからアクセス可能なリポジトリ

[email protected]:anotheraccountを使用して別のアカウントからアクセス可能なリポジトリ

各アカウントには独自のSSHキーがあります。両方のSSHキーが追加され、構成ファイルが作成されました。ただし、構成ファイルが正しいとは思わない。 [email protected]:accountnameを使用してアクセスされるリポジトリがid_rsaを使用し、[email protected]:anotheraccountid_rsa_anotheraccountを使用するように指定する方法がわかりません。

236
radesix

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への接続は正しいプロファイルを使用しました。以前は、デフォルトで最初の公開鍵が使用されていました。

にとって 認証エージェントへの接続を開けませんでした ssh-addを使用する場合、
チェック: https://stackoverflow.com/a/17695338/176031

297
Jim Wrubel

私は最近これを行わなければならず、最終的に情報をまとめるためにこれらのすべての回答とコメントをふるいにかけなければならなかったので、私はあなたの便宜のためにここにすべてを1つの投稿に入れます:


ステップ1:sshキー
必要なキーペアを作成します。この例では、デフォルト/オリジナルの「id_rsa」(デフォルト)と新しい「id_rsa-work」という名前を付けています。

ssh-keygen -t rsa -C "[email protected]"


ステップ2:ssh config
〜/ .ssh/configを作成/変更して、複数のsshプロファイルを設定します。わずかに異なる「ホスト」値に注意してください。

# Default GitHub
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa

# Work GitHub
Host work.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_work


ステップ3:ssh-add
これを行う必要がある場合とそうでない場合があります。確認するには、次を実行してIDフィンガープリントをリストします。

$ ssh-add -l
2048 1f:1a:b8:69:cd:e3:ee:68:e1:c4:da:d8:96:7c:d0:6f stefano (RSA)
2048 6d:65:b9:3b:ff:9c:5a:54:1c:2f:6a:f7:44:03:84:3f [email protected] (RSA)

エントリが存在しない場合は、次を実行します。

ssh-add ~/.ssh/id_rsa_work


ステップ4:テスト
これをすべて正しく行ったことをテストするには、次の簡単なチェックをお勧めします。

$ ssh -T [email protected]
Hi stefano! You've successfully authenticated, but GitHub does not provide Shell access.

$ ssh -T [email protected]
Hi stefano! You've successfully authenticated, but GitHub does not provide Shell access.

使用するキー/ IDに応じて、ホスト名(github/work.github)を変更する必要があることに注意してください。しかし、今はあなたが行ってもいいはずです! :)

162
stefano

aliceがgithub.comユーザーであり、2つ以上のプライベートリポジトリrepoNがあるとします。この例では、repo1repo2という名前の2つのリポジトリのみを使用します

https://github.com/alice/repo1

https://github.com/alice/repo2

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

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

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ファイルに移動し、リモートのOriginのURLを次のように変更しました。

[remote "Origin"]
        url = "ssh://[email protected]/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 "[email protected]"を使用します)。これが混乱にならないように、次のようにキーに名前を付けます。

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

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

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

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

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

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

Repo1の場合

[remote "Origin"]
        url = "ssh://[email protected]/alice/repo1.git"

Repo2の場合

[remote "Origin"]
        url = "ssh://[email protected]/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つのキーを生成し、リポジトリを作成するようにレッグワークを行うことをお勧めします。より多くのキーを処理する必要がありますが、セキュリティが侵害されても脆弱ではなくなります。

39
Gubatron

私はgithubに2つのアカウントを持っていますが、これを機能させるために(linuxで)私がやったことです。

キー

  • ssh-keygenを介して2ペアのrsaキーを作成し、それらに適切な名前を付けて、生活を楽にします。
  • ssh-add path_to_private_key経由でローカルエージェントに秘密鍵を追加します
  • Githubアカウントごとに、(個別の)公開キーをアップロードします。

構成

〜/ .ssh/config

Host github-kc
    Hostname        github.com
    User git
    IdentityFile    ~/.ssh/github_rsa_kc.pub
    # LogLevel DEBUG3

Host github-abc
    Hostname        github.com
    User git
    IdentityFile    ~/.ssh/github_rsa_abc.pub
    # LogLevel DEBUG3

リポジトリのリモートURLを設定:

  • ホストgithub-kcのレポの場合:

    git remote set-url Origin git@github-kc:kuchaguangjie/pygtrans.git
    
  • ホストgithub-abcのレポの場合:

    git remote set-url Origin git@github-abc:abcdefg/yyy.git
    

説明

~/.ssh/configのオプション:

  • Host github- <identify_specific_user>
    ホストは、ホストとアカウントを識別できる値であれば、実際のホストである必要はありません。たとえば、github-kcは、ローカルラップトップのgithub上のアカウントの1つを識別し、

    GitリポジトリのリモートURLを設定する場合、これはgit@の後に配置する値です。これは、git remote set-url Origin git@github-kc:kuchaguangjie/pygtrans.gitのようにリポジトリがホストにマッピングする方法です。


  • [以下はHostのサブオプションです]
  • Hostname
    実際のホスト名を指定し、githubにgithub.comを使用します。
  • User git
    githubのユーザーは常にgitです。
  • IdentityFile
    使用するキーを指定し、パスを公開キーに設定するだけで、
  • LogLevel
    デバッグするログレベルを指定します。問題がある場合は、DEBUG3が最も詳細な情報を提供します。

20
Eric Wang

~/.ssh/configIdentityFileパラメーターを使用します。

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/github.rsa
    User petdance
17
Andy Lester

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

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

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

  2. keyfile.pubをgitプロバイダーにアップロードします

  3. マシンでssh-agentを起動します(ps -ef | grep ssh-agentで確認して、既に実行されているかどうかを確認できます)
  4. ssh-add .\keyfileを実行して資格情報を追加します
  5. これでgit clone git@provider:username/project.gitを実行できます
2
berniey

すべての手順を理解するのに多くの時間を費やしました。それでは、ステップごとに説明しましょう。

  1. ssh-keygen -t rsaを使用して新しいIDファイルを作成します。パスフレーズが必要ないので、proj1.id_rsaのような代替手段を与え、間違いなくヒットします。
  2. .ssh/configに新しいセクションを追加します。

    Host proj1.github.com
        HostName github.com
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/proj1.id_rsa
    

最初のセクションを考慮に入れて、後でproj1.github.comセクションに戻ることに注意してください。

  1. IDをsshエージェントssh-add ~/.ssh/proj1.id_rsaに追加します
  2. 私が最初に台無しにしたこと-今、proj1リポジトリのクローンを作成するときは、proj1.github.com(設定ファイルの正確なホスト)を使用してそれを行います。 git clone [email protected]

良いチュートリアルです

ホストを混乱させないでください

2
I159

これらに対処するために使用する手法を投稿しました here

1
David H

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

ssh-keygen -t rsa -f ~/.ssh/id_rsa_work -C "[email protected]"

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

1
li2

私が使った

Host github.com
   HostName github.com
   IdentityFile ~/.ssh/github_rsa
   User [email protected]

それは元気でした。

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

1
Jyoti Prakash

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

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

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

そして、以下を実行して、キーがssh-agentに追加されていることを確認してください。

ssh-add ~/.ssh/id_rsa_anotheraccount

上記のコマンドは、現在のセッションのssh-agentにのみキーを追加することに注意してください。これを永久に機能させたい場合は、ssh-agentに「永続的に」追加する必要があります。例: bunt の場合と OSX の場合.

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

1
jkukul