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


249

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

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

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

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


私は、このリンク役に立ったmedium.freecodecamp.org/...
jgreen

〜/ .ssh / configに3つの個別のSSH IDがあります。学校のサーバー用のものにはパスコードがあります。個別の作業/個人用GitHubアカウントの2はありません。git pull個別のIDファイル「IdentitiesOnly = yes」、個別のドメインおよびホスト名が存在するにもかかわらず、実行は失敗し続け、学校のパスコードを要求し続けましたssh-add -l。.ssh / configで他のセクションの下にそのセクションを移動する必要がありましたが、git pull両方のGitHubアカウントからuni sshパスワードを要求せずに成功しました。
mc01

回答:


309

Andy Lesterの応答は正確ですが、これを機能させるために必要な重要な追加手順を見つけました。1つは個人用、もう1つは仕事用の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-addhttps
//stackoverflow.com/a/17695338/1760313を確認して ください


39
ありがとう!- ssh-add私が欠けていたものでした。
セージ2011

ssh-addを使用すると、キーのファイル権限が正しく設定されていないことがわかりました。修正したら、すべてが機能しました。ほんとありがと!
ファットマン

6
doblock.com/articles/…も参照してください。ここで重要な新しい情報は、リモートURLのホスト名にgit@work.github.com:work / my_repo.gitというユーザー名(この例では「work」)を追加する必要がある場合があることです。 「git@github.com ...」とは対照的です)
BobS 2012年


15
「デフォルトで最初の公開鍵になっている」という問題を修正するには、ファイルのセクションにを追加IdentitiesOnly yesします。これにより、sshに対して、すべてのサーバーでスパムを送信するのではなく、指定したIdentityFilesを実際に使用するように指示します。Host *~/.ssh/config
メカニカルカタツムリ

172

私は最近これを行う必要があり、これらのすべての回答とコメントをふるいにかけて最終的に情報をまとめる必要があったので、便宜上、すべてを1つの投稿にまとめます。


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

ssh-keygen -t rsa -C "stefano@work.com"


ステップ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 stefano@work.com (RSA)

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

ssh-add ~/.ssh/id_rsa_work


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

$ ssh -T git@github.com
Hi stefano! You've successfully authenticated, but GitHub does not provide shell access.

$ ssh -T git@work.github.com
Hi stefano! You've successfully authenticated, but GitHub does not provide shell access.

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


1
これは素晴らしい反応です。設定ファイルを利用するには、ssh-addを使用して両方のsshキーを追加する必要がありました。おかげで:)
gaurav.singharoy

追加したいのは、ssh-keygen -t rsaを実行すると、デフォルトのファイル名が表示されることです。ここに、カスタムファイル名を入力します。
Donato 2016

ベストアンサーの1つ。また、このビデオは私を助けました。youtube.com/watch?v=fnSRBRiQIU8&feature=youtu.be
TestingWithArif 2018年

この記事はあなたのGitの設定「メール」を設定する含まれている場合は良いポストは、いいだろう: help.github.com/articles/...
デイブ・エンジニア

43

alice2つ以上のプライベートリポジトリを持つgithub.comユーザーであるとしましょうrepoN。この例では、名前が付けられた2つのリポジトリrepo1repo2

https://github.com/alice/repo1

https://github.com/alice/repo2

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

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

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.comし、repo2.github.com

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

repo1の場合

[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
ホストに一致するサブドメインを指定すること.ssh/configは重要なステップです-そのために感謝します
Mike Miller

22

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

キー

  • を介して2ペアのrsaキーを作成しssh-keygen、適切に名前を付けて、作業を簡単にします。
  • プライベートキーをローカルエージェントに追加する 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

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

    git repoのリモートURLを設定する場合、これはの後に置く値です。これは、git@repoがホストにマッピングされる方法です。たとえば、git remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git


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


素敵-必要なかったssh-add path_to_private_key-おそらくこの場合エージェントは必要ないからだ。構成ファイルは、キーへのパスを明示的に定義しています。
Mark Chackerian、2016年

2
@MarkChackerian ssh-addキーがパスワードで保護されていないか、Macを使用している場合はOSXキーチェーンがキーを処理しているので、必要はないと思います。ssh-addキーにアクセスするたびにパスフレーズを入力する必要がないようにします。
Ashhar Hasan

18

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

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

ありがとうございます。これは正確ではありません。私は答えを見つけ、以下で共有しました。
radesix 2010

私のアプローチがあなたのケースでうまくいくと確信しています。さまざまなユーザーとさまざまなIDファイルを識別できます。configスタンザでそれぞれに異なるHostパラメーターを指定する必要があるだけです。
アンディレスター

1
アンディ、以下で見つけたリンクによると、ホストから.comを削除する必要がありました。私がそれをしたらそれはうまくいきました。
radesix 2010

5

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

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

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

そして、次のコマンドを実行して、鍵がssh-agentに追加されていることを確認してください。

ssh-add ~/.ssh/id_rsa_anotheraccount

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

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


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

4

私はすべてのステップを理解するのに長い時間を費やしました。だからステップバイステップで説明しましょう:

  1. を使用して新しいIDファイルを作成しますssh-keygen -t rsaproj1.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 git@proj1.github.com

良いチュートリアルです。

ホストを台無しにしないでください


トゥロリアルへのリンクをありがとう!あなたはタイプミスを持っています:キー名id_rsa_proj1proj1_id_rsa実際には同じでなければなりません。.git/configチュートリアルの設定に関する部分を回答に追加することもできます。
セザール

:あなたはまだタイプミス持つproj1.id_rsaproj1_id_rsa
セザール

2

私が使った

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

それはうまくいきました。

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


2

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

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

以来id_rsa_work、ファイルのパスに存在しない~/.ssh/、と私は手動でこのファイルを作成し、それが動作しません:(


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.