2つの異なるSSHキー/ GitHubアカウントをうまく連携させるのに苦労しています。次のセットアップがあります。
[email protected]:accountname
を使用して1つのアカウントからアクセス可能なリポジトリ
[email protected]:anotheraccount
を使用して別のアカウントからアクセス可能なリポジトリ
各アカウントには独自のSSHキーがあります。両方のSSHキーが追加され、構成ファイルが作成されました。ただし、構成ファイルが正しいとは思わない。 [email protected]:accountname
を使用してアクセスされるリポジトリがid_rsa
を使用し、[email protected]:anotheraccount
がid_rsa_anotheraccount
を使用するように指定する方法がわかりません。
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
私は最近これを行わなければならず、最終的に情報をまとめるためにこれらのすべての回答とコメントをふるいにかけなければならなかったので、私はあなたの便宜のためにここにすべてを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)を変更する必要があることに注意してください。しかし、今はあなたが行ってもいいはずです! :)
alice
がgithub.comユーザーであり、2つ以上のプライベートリポジトリrepoN
があるとします。この例では、repo1
とrepo2
という名前の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
を実行できます。
したがって、あなたの本能は、そのキーを取得して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つのキーを生成し、リポジトリを作成するようにレッグワークを行うことをお勧めします。より多くのキーを処理する必要がありますが、セキュリティが侵害されても脆弱ではなくなります。
私はgithubに2つのアカウントを持っていますが、これを機能させるために(linux
で)私がやったことです。
ssh-keygen
を介して2ペアのrsaキーを作成し、それらに適切な名前を付けて、生活を楽にします。ssh-add path_to_private_key
経由でローカルエージェントに秘密鍵を追加します〜/ .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.com
を使用します。User
gitgit
です。IdentityFile
LogLevel
DEBUG3
が最も詳細な情報を提供します。~/.ssh/config
でIdentityFile
パラメーターを使用します。
Host github.com
HostName github.com
IdentityFile ~/.ssh/github.rsa
User petdance
私の場合、上記の解決策のいずれも私の問題を解決しませんでしたが、ssh-agentは解決します。基本的に、私は次のことをしました:
以下に示すssh-keygenを使用してキーペアを生成します。キーペアを生成します(この例では.\keyfile
と.\keyfile.pub
)
ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfile
keyfile.pub
をgitプロバイダーにアップロードします
ps -ef | grep ssh-agent
で確認して、既に実行されているかどうかを確認できます)ssh-add .\keyfile
を実行して資格情報を追加しますgit clone git@provider:username/project.git
を実行できますすべての手順を理解するのに多くの時間を費やしました。それでは、ステップごとに説明しましょう。
ssh-keygen -t rsa
を使用して新しいIDファイルを作成します。パスフレーズが必要ないので、proj1.id_rsa
のような代替手段を与え、間違いなくヒットします。.ssh/config
に新しいセクションを追加します。
Host proj1.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/proj1.id_rsa
最初のセクションを考慮に入れて、後でproj1.github.com
セクションに戻ることに注意してください。
ssh-add ~/.ssh/proj1.id_rsa
に追加しますproj1.github.com
(設定ファイルの正確なホスト)を使用してそれを行います。 git clone [email protected]
。ホストを混乱させないでください
これらに対処するために使用する手法を投稿しました here
@stefanoの答えを補完するものとして、別のアカウントの新しいSSHキーを生成するときに-f
でコマンドを使用することをお勧めします。
ssh-keygen -t rsa -f ~/.ssh/id_rsa_work -C "[email protected]"
id_rsa_work
ファイルはパス~/.ssh/
に存在しないため、このファイルを手動で作成しますが、動作しません:(
私が使った
Host github.com
HostName github.com
IdentityFile ~/.ssh/github_rsa
User [email protected]
それは元気でした。
さまざまなユーザー名のさまざまなrsaキーに対して、.ssh/configファイルで上記の設定を使用します。
(他のすべての回答で提案されているように)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と条件付きインクルード( 例を参照 )を使用して、このアプローチを複数のリポジトリに拡張することも可能です。