同じコンピューター上の複数のgithubアカウント?


419

コンピューターから、実際の「作業」リポジトリとgitハブ上の個人用リポジトリの両方で作業しようとしています。

仕事用アカウントが最初に設定され、すべてが問題なく機能します。

しかし、私の個人用アカウントは、別のアカウント/メールで設定された個人用リポジトリにプッシュすることができないようです。

仕事用のキーを個人用アカウントにコピーしようとしましたが、もちろんキーは1つのアカウントにしかアタッチできないため、エラーが発生します。

両方のアカウント間で、それぞれのgithub認証情報からどのようにプッシュ/プルできますか?


3
リンクhttp://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accountsに記載されている手順は私にとってうまくいき、あなたが1つのことを追加するだけでは不十分ですを使用して個人のリポジトリキーを追加する必要があります<br>&nbsp; ssh-add ~/.ssh/id_rsa_COMPANY <br/> ssh-agentに使用のために含めるように指示します。<hr />上記のチュートリアルを使用すると、残りはうまく機能します。
Brut3e 2013年

2
「もちろん、キーは1つのアカウントにしか添付できないため」?どうして?
2016

Git 2.13以降では、.gitconfigの条件付きインクルードをサポートしています。これは、フォルダー階層ごとにIDを管理するのに便利な方法です。stackoverflow.com/a/36296990/901597
Joe Bowbeer

回答:


275

必要なのは、複数のSSHキーペアを使用してSSH設定を構成することだけです。

また、異なるペルソナを使用して複数のリポジトリで作業している場合は、個々のリポジトリでユーザー設定がそれに応じて上書きされていることを確認する必要があります。

ユーザー名、メール、GitHubトークンの設定–個々のリポジトリの設定の上書き https://help.github.com/articles/setting-your-commit-email-address-in-git/

お役に立てれば。

注: あなたのいくつかはgitのから、異なるリポジトリに使用する別の電子メールを必要とするかもしれ2.13あなたはグローバル設定ファイルを編集して、ディレクトリごとに電子メールを設定することができますがで発見:~/.gitconfigそのような条件文を使用しました:

[user]
    name = Pavan Kataria
    email = defaultemail@gmail.com

[includeIf "gitdir:~/work/"]
    path = ~/work/.gitconfig

そして、あなたの仕事固有の設定〜/ work / .gitconfigは次のようになります:

[user]
    email = pavan.kataria@company.tld

コメントでこれを知らせてくれて@alexgに感謝します。


4
3番目のリンクが壊れています(複数のSSHキー)
RustyTheBoyRobot

12
この最初のリンクは、ユーザーアカウントと組織アカウントのページにリダイレクトされます(本来の目的であるかどうかはわかりません)。 このチュートリアルは簡単で、私の問題を解決しました。
エリックH.

1
@Camilo私は新しい更新されたリンクが何であるかわからないので、もし彼が更新されたリンクを知っているなら、彼がそれをフックアップするのは親切でしょう:)
Pavan

4
@AlmasAdilbekもう3年になりますが、リンクは壊れてしまい、壊れ続ける可能性があります。代わりの記事を見つけるか、元のソースをもう一度見つけるように気を付けてください。そうすれば、助けて私のリンクを更新できるようになりますか?壊れたリンクをいつまでも修正し続けることはできません。
Pavan

3
これは、実際の投稿の重要なステップを要約しないと答えにはなりません。この回答はすでにリンクの腐敗に悩まされていますが、必要な更新tobが質問に対する実際の回答を提供していません。
ありがとう

139

HTTPSを使用:

リモートURLをhttpsに変更します。

git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

そしてあなたは行ってもいいです:

git push

コミットがUSERNAMEによって実行されたように表示されるようにするには、このプロジェクトのuser.nameuser.emailも設定できます。

git config user.name USERNAME
git config user.email USERNAME@example.com

8
別のプライベートリポジトリからすばやくダウンロードするための最も簡単なソリューション。
Jaap Geurts

1
これは私がスタックで見つけた最良の解決策です
Harvinder Singh

sshキーを追加したくなかったので、このソリューションは最も簡単な方法を提供します。すでにあなたの設定している場合だけで、ノート、user.nameおよびuser.email--globalフラグを、ちょうど彼がただ1つのレポのためにローカルに設定するには、上記言うん。それは多くの問題を解決しました。次に、古いリポジトリを削除します...
thatrobotguy

72

形になる

別のgithub / bitbucket / whateverアカウントでgitリポジトリを管理するには、新しいSSHキーを生成するだけです。

私たちはあなたの第二のIDでレポを引っ張っ/プッシュを開始する前に、しかし、我々は形にあなたをもらわなく-レッツは、あなたのシステムは、典型的なとセットアップであると仮定id_rsaし、id_rsa.pub鍵のペア。今、あなたtree ~/.sshはこのように見えます

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub

まず、そのキーペアに名前を付けます。わかりやすい名前を追加すると、どのユーザー/リモートでどのキーが使用されているかを覚えやすくなります。

# change to your ~/.ssh directory
$ cd ~/.ssh

# rename the private key
$ mv id_rsa github-mainuser

# rename the public key
$ mv id_rsa.pub github-mainuser.pub

次に、新しいキーペアを生成しましょう。ここでは、新しいキーに名前を付けます。github-otheruser

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser

私たちが見たときに今、tree ~/.ssh我々が表示さ

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub

次に、~/.ssh/config主要な構成を定義するファイルを設定する必要があります。適切な所有者読み取り/書き込み専用権限で作成します

$ (umask 077; touch ~/.ssh/config)

それをお気に入りのエディターで開き、次のコンテンツを追加します

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

おそらく、プライマリgithub IDに関連付けられた既存のリポジトリがいくつかあるはずです。そのため、「デフォルト」のgithub.com Hostmainuserキーを使用するように設定されています。あるアカウントを別のアカウントよりも優先したくない場合は、システム上の既存のリポジトリを更新して、更新されたssh構成を使用する方法を説明します。


新しいSSHキーをgithubに追加します

頭の上github.com/settings/keysあなたの新しい追加するために、公開鍵を

公開鍵の内容は、次のようにして取得できます:コピーしてgithubに貼り付けます

$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...

これで、新しいユーザーIDがすべてセットアップされました。以下に、その使用方法を示します。


物事を成し遂げる:リポジトリのクローン

では、これをどのように組み合わせてgitおよびgithubと連携させるのでしょうか。まあ、卵なしでは鶏肉を作ることができないため、既存のレポのクローンを作成します。この状況は、職場の新しいgithubアカウントがあり、会社のプロジェクトに追加された場合に当てはまる可能性があります。

github.com/someorg/somerepoすでに存在していて、あなたがそれに追加されたとしましょう–クローニングは簡単です

$ git clone github.com-otheruser:someorg/somerepo.git

その太字部分は、ファイルに設定した名前と一致している必要があります。これはgitを対応するものに正しく接続し、githubで適切に認証しますHost~/.ssh/configIdentityFile


物事を成し遂げる:新しいリポジトリを作成する

さて、卵なしで鶏肉を作ることはできないので、セカンダリアカウントで新しいリポジトリを公開する方法を見ていきます。この状況は、セカンダリgithubアカウントを使用して新しいコンテンツを作成しているユーザーに適用されます。

ローカルで少し作業を行って、githubにプッシュする準備ができたとしましょう。よろしければ私と一緒にフォローしてください

$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init

あなたのアイデンティティを使用するようにこのリポジトリを設定してください

$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"

最初のコミットをしてください

$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"

コミットをチェックして、git logを使用して新しいIDが使用されたことを確認します

$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>

よし、githubにプッシュする時がきた!githubはまだ新しいリポジトリを認識していないため、まずgithub.com/newにアクセスして新しいリポジトリを作成します– somerepoという名前を付けます

ここで、正しいID /資格情報を使用してGitHubに「通信」するようにリポジトリを構成するために、リモートを追加しました。新しいアカウントのgithubユーザー名はsomeuser...

$ git remote add origin github.com-otheruser:someuser/somerepo.git

その太字の部分は絶対に重要でありHost~/.ssh/configファイルで定義したものと一致する必要があります

最後に、レポをプッシュします

$ git push origin master

既存のリポジトリを更新して新しいSSH構成を使用する

すでにいくつかのリポジトリが複製されているが、今度は新しいSSH構成を使用したいとします。上記の例では、SSH構成ファイルで以前のid_rsa/ id_rsa.pubキーペアをに割り当てることにより、既存のリポジトリをそのまま維持していますHost github.com。これには何の問題もありませんが、私は少なくとも5つのgithub構成を現在持っており、それらの1つを「デフォルト」構成と見なしたくありません。それぞれについて明確にしたいと思います。

この前に

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

これをこれに更新します(太字の変更)

Host github.com-mainuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

しかし、これは、github.comリモートを持つ既存のリポジトリがこのIDファイルで動作しなくなったことを意味します。しかし、心配しないでください、それは簡単な修正です。

既存のリポジトリを更新して新しいSSH構成を使用するには、リポジトリのgit構成ファイルを開いてURLを更新するだけです!

$ cd existingrepo
$ nano .git/config

リモート起点フィールドを更新します(太字で変更)

[remote "origin"]
        url = github.com-mainuser:someuser/existingrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

それでおしまい。今、あなたはpush/ pull心ゆくまで


SSHキーファイルの権限

公開鍵が正しく機能しない問題が発生している場合、SSHはディレクトリおよび対応する鍵ファイルで許可されているファイル権限に非常に厳格~/.sshです

経験則として、ディレクトリ700とファイルはすべて同じである必要があります。600つまり、所有者は読み取り/書き込み専用であり、他のグループ/ユーザーは読み取り/書き込みできません。

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub

SSHキーの管理方法

接続するホストごとに個別のSSHキーを管理しているため、1つのキーが侵害された場合でも、そのキーを使用した他のすべての場所でキーを更新する必要はありません。これは、アドビから1億5,000万人のユーザー情報が盗まれたという通知を受け取ったときと同じです。クレジットカードをキャンセルして、それに依存するすべてのサービスを更新する必要があります。

ここでは私のものだ~/.ssh私は1つの持っている:のようなディレクトリのルックスは、.pem各ドメインのフォルダ内の各ユーザのキーを、私はに接続します。.pemキーを使用するので、キーごとに1 つのファイルのみが必要です。

$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│   ├── naomik.pem
│   ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│   ├── naomi.pem
├── somedomain.com
│   ├── someuser.pem
└── someotherdomain.org
    └── someuser.pem

そして、これが私の対応する/.ssh/configファイルです。明らかにgithubに関するものは、githubに関するこの質問への回答に関連していますが、この回答は、任意の数のサービス/マシンでssh IDを管理するための知識を身に付けることを目的としています。

Host github.com-naomik
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/naomik.pem

Host github.com-someuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/someusername.pem

Host naomi.makes.software
  User naomi
  IdentityFile ~/.ssh/naomi.makes.software/naomi.pem

Host somedomain.com
  HostName 162.10.20.30
  User someuser
  IdentityFile ~/.ssh/somedomain.com/someuser.pem

Host someotherdomain.org
  User someuser
  IdentityFile ~/.ssh/someotherdomain.org/someuser.pem

PEMキーからSSH公開キーを取得する

上記で、キーごとに1つのファイルしかないことに気付きました。公開鍵を提供する必要がある場合は、必要に応じて生成するだけです。

したがって、githubがssh公開鍵を要求したら、このコマンドを実行して公開鍵をstdoutに出力します–必要に応じてコピー/貼り付け

$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...

これは、キーをリモートマシンに追加するために使用するプロセスと同じです。ssh-rsa AAAA...値は、リモートのにコピーされ~/.ssh/authorized_keysたファイル


お使いの変換id_rsa/ id_rsa.pubPEM形式に鍵ペアを

だからあなたはあなたにあなたの主要なファイルを飼いならし、いくつかのファイルシステムの残骸を減らしたいですか?キーペアを単一の PEMに変換するのは簡単です

$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem

または、上記の例に従って、名前を変更しid_rsa -> github-mainuserid_rsa.pub -> github-mainuser.pub

$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem

これが正しく変換されたことを確認するために、生成された公開鍵が古い公開鍵と一致することを確認する必要があります

# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

これでファイルが作成されたgithub-mainuser.pemので、古いファイルgithub-mainusergithub-mainuser.pubファイルを安全に削除できます。必要なのはPEMファイルだけです。必要なときに公開鍵を生成するだけです^ _ ^


ゼロからのPEMキーの作成

あなたは、公開鍵/秘密鍵のペアを作成し、する必要はありません、その後、単一のPEMキーに変換します。PEMキーを直接作成できます。

作成してみましょう newuser.pem

$ openssl genrsa -out ~/.ssh/newuser.pem 4096

SSH公開鍵の取得は同じです

$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==

2
私はこれが古い質問であることを理解していますが、ここでのほとんどすべての回答がいくつかのチュートリアルへのリンクに依存しているため、リンク腐敗する可能性があるという事実を許しません。出典/引用をリンクすることは問題ありませんが、ここに投稿された回答の重要な部分を要約しないと、リンクに頼ることはできません。
ありがとう

私はあなたの優れた詳細な答えを明らかに正しい方法として支持しました。それに関する私の問題は、その複雑なことであり、いくつかのアカウントを数年使用した後、新しいアカウントを取得した後、「正しい方法」でそれを行う方法を思い出せません。以下の私の方法は非常に簡単です。3つの新しいファイルと1つの新しいスクリプトを作成するだけです。それは私にとって何年もの間完璧に機能しました。読者は、自分に最適なものを決定できます。
デビッドH

DavidH私は発言に感謝します。全体として見ると、答えは複雑に感じられますが、読者は本当に、答えのほんの一部に関心を向ける必要があるだけです。回答は、SSHキーを一般的に管理するための堅牢なソリューションを設定することを目的としており、完全にオプションです。
ありがとう

git clone github.com-otheruser:someorg/somerepo.git必要があると思いますgit clone git@github.com-otheruser:someorg/somerepo.git(を追加git@)。少なくとも、それが私が必要としていたことです。
CommonsWare

@CommonsWareユーザーの指定など、すべてのコマンドラインオプションは、SSH構成でも実行できます。例:(Host github.com改行)User git(改行)IdentityFile ...
ありがとう

24

〜/ .ssh / configでgithub.comに異なるホストエイリアスを作成し、各ホストエイリアスに独自のsshキーを与えることで、混乱することなく複数のgithubアカウントを簡単に使用できます。これは、github.comがユーザーではなく、常にgitであるだけでなく、接続に使用したsshキーで区別されるためです。独自のホストエイリアスを使用してリモートオリジンを設定するだけです。」

上記の概要は、以下のブログ投稿へのコメントの厚意によるものです。

この説明が一番わかりやすいと思います。そして、少なくとも2012年4月の時点で、それは私には有効です。

http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/


1
おそらく実行する必要もあります$ ssh-add ~/.ssh/id_rsa_COMPANY- エラーを
Pat

22

http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/にある mishabaによってリンクされた詳細は、私にとって非常にうまく機能しています。

そのページから:

$ touch ~/.ssh/config

次に、そのファイルを次のように編集します(アカウントごとに1つのエントリ)。

#Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

Host github-COMPANY
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_COMPANY

8
またgit clone git@github-COMPANY/repo/name.git、正しいsshキーを取得するためにクローン(およびおそらく他のコマンド)を実行する場合は、「github.com」または「github-COMPANY」を使用する必要があることにも注意してください。
hellatan 2012

@dtan:httpsでクローンを作成する必要がある場合、これをどのように実装しますか?git clone https://github-COMPANY/GitUserName/projectname.git動作しないようです。github.comを使用したデフォルトのキーは問題なく機能します。
Isaac Nequittepas 2012

1
@ IsaacRemuant、httpsを絶対に通過する必要がありますか?プル/プッシュするたびに、ユーザー認証情報を入力する必要があります。git://github-COMPANY...projectname.gitを実行できれば最適です。https呼び出しのエラーメッセージはありますか?
hellatan 2012

@dtan:どうやら私のために開かれているにもかかわらず、ポート22でいくつかの問題がありました。ssh: connect to host github.com port 22: Bad file number fatal: The remote end hung up unexpectedly。これまでは、httpsが唯一の方法でした。 $ git clone https://github-USER/UserName/test_project_user.git Cloning into test_project_user... error: Couldn't resolve host 'github-USER' while accessing https://github-USER/N UserName/test_project_user.git/info/refs fatal: HTTP request failed それが構成ファイルに関連しているのか、またはhttpsでgit呼び出しをエミュレートしようとしているのかどうかはわかりません。
Isaac Nequittepas

最終的には、すべてを試して詳細な分析を行い、それを質問として適切に投稿します。
Isaac Nequittepas

13
  • 〜/ .sshに移動します
  • configという名前のファイルを作成します(拡張子はありません)。
  • 設定ファイルを開き、以下のコードを追加します。(アカウントに応じて変更)

    1. アカウント1

      # account_1
      Host gitlab.com-account_1
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_account_1
      
    2. アカウント2

      # Account2
      Host gitlab.com-Account2
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account2
      
    3. アカウント3

      # Account_3
      Host github.com-Account3
      HostName github.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account_3
      
  • 次のようにリモートURLを追加します

    1. アカウント1

      git remote add origin git@gitlab.com-account_1:group_name/repo_name.git
      
    2. アカウント2

      git remote add origin git@gitlab.com-Account2:group_name/repo_name.git
      
    3. アカウント3

      git remote add origin github.com-Account3:github_username/repo_name.git
      

IdentityFile名がssh鍵の生成中に作成したものと同じであることを確認してください。


なぜ使用するのPreferredAuthentications publickeyか説明してもらえますか?
Oliver Pearmain

@OliverPearmainここでは、認証に推奨される方法がpublickeyであることをsshに伝えます。PreferredAuthenticationsでパスワードを使用できますが、認証のためにパスワードの入力が必要になる場合があります。
Pranav VR

1
@Pranav VRの返信に感謝します。同じものを使いたいようです:-)
Oliver Pearmain

11

シェルスクリプトを使用して、「アクティブ」にしたいアカウントに切り替えます。基本的に、最初からやり直し、1つのアカウントを適切に構成して機能させ、これらのファイルを適切なプレフィックスが付いた名前に移動します。それ以降は、「github」または「gitxyz」コマンドを使用して切り替えます。

# my github script
cd ~/.ssh

if [ -f git_dhoerl -a -f git_dhoerl.pub -a -f config_dhoerl ]
then
    ; 
else 
    echo "Error: missing new files"
    exit 1
fi 

# Save a copy in /tmp, just in case
cp id_rsa /tmp
cp id_rsa.pub /tmp
cp config /tmp
echo "Saved old files in /tmp, just in case"

rm id_rsa
rm id_rsa.pub
rm config
echo "Removed current links/files"

ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config

git config --global user.email "dhoerl@<company>.com"
git config --global github.user "dhoerl"        
git config --global github.token "whatever_it_is"

ssh-add -D

私はこれでとても幸運でした。Xcodeで実行スクリプトも作成しました(Macユーザー向け)。適切な設定(gitを使用しているため)がない限り、プロジェクトはビルドされません。

依存関係の後に配置されたスクリプトを実行(シェルとして/ bin / kshを使用):

if [ "$(git config --global --get user.email)" != "dhoerl@<company>.com" ]
then
    exit 1
fi

編集:新しいファイルの存在のテストを追加し、古いファイルを/ tmpにコピーして、以下の@naomikによるコメントに対処します。


複数の質問に対するコピーと貼り付けの定型文/逐語的回答を投稿するときは注意してください。これらはコミュニティによって「スパム行為」としてフラグが付けられる傾向があります。:あなたはこれをやっている場合、それは通常、その代わりとしてフラグそれらような質問が重複している意味stackoverflow.com/questions/7548158stackoverflow.com/questions/3225862stackoverflow.com/questions/7924937
ケヴ

1
これは悪夢です。誰かが自分のことを理解する前にこのスクリプトを実行した場合id_rsaid_rsa.pubキーが削除されるだろう、彼らはリモートでロックアウトされた可能性があります。
ありがとう

@naomikはスクリプトを更新して、最初に新しいファイルをチェックし、古いファイルを/ tmpに保存しました
David H

10

この回答は初心者向けです(none-git gurus)。私は最近この問題を抱えていましたが、おそらくそれは私だけですが、ほとんどの答えはgitのかなり事前の理解を必要とするようでした。このスレッドを含むいくつかのスタックオーバーフローの回答を読んだ後、GitHubアカウントを簡単に切り替えるために必要な手順を次に示します(例:2つのGitHubアカウント、github.com / personalgitHub.com/workを想定):

  1. 既存のsshキーを確認する:ターミナルを開いてこのコマンドを実行ls -al ~/.ssh
    し、拡張子.pubが付いた既存のsshキーファイルがsshキーであるため、personalworkアカウントに2つ必要です。1つしかない場合、またはまったくない場合は、他の方法で生成するときはこれをスキップしてください。

    -生成SSHキー:へgithubのへのログイン(いずれかの個人または仕事ACC。)、ナビゲート設定とそれに関連する電子メールをコピーします。
    ターミナルに戻ってを実行するとssh-keygen -t rsa -C "the copied email"、次のように表示されます

    。Generatingpublic / private rsa key pair。
    キーを保存するファイルを入力します(/.../.ssh/id_rsa):


    id_rsaすぐに生成されるSSHキーのデフォルト名があるので、パスをコピーして、例えば、デフォルトの名前を変更 /.../.ssh/id_rsa_work仕事用アカウントを生成する場合。パスワードを入力するか、単にEnterて無視すると、キーのランダムアートイメージは次のとおりです。完了しました。
    2番目のgithubアカウントについて、この手順をもう一度繰り返します。上書きを避けるために、正しいメールアドレスと別のSSHキー名(id_rsa_personalなど)を使用してください。
    この段階で、ls -al ~/.ssh再度実行すると2つのsshキーが表示されます。
  2. githubのアカウントに関連付けSSHキー::次のステップは、これを実行しますが、独自のSSHキー名を置き換え、SSHキーの1コピーすることでpbcopy < ~/.ssh/id_rsa_work.pub置き換える、id_rsa_work.pubあなたはあなたと呼ばれるものと。
    これでsshキーがクリップボードにコピーされたので、githubアカウントに戻ります[コピーしたsshキーがの場合は、作業アカウントにログインしていることを確認してくださいid_rsa_work]に移動し、
    [設定-SSHおよびGPGキー ]に移動して、[ 新しいSSHキー ]ボタンをクリックします。 (新しいGPGキー btw:Dではありません)
    このキーにタイトルを付け、キーを貼り付け、[SSHキーの追加]をクリックします。これで、sshキーの追加に成功したか、それが問題なく機能していることに気づきました(または、新しいGPGキーを選択したためにエラーが発生しました 代わりに[)新しいSSHキー:D)。
  3. sshキーをgitHubアカウントに関連付けます:2番目のアカウントに対して上記の手順を繰り返します。
  4. グローバルgit構成を編集します。最後のステップは、グローバル構成ファイルがすべてのgithubアカウントを認識するようにすることです(いわば)。
    実行git config --global --editしてこのグローバルファイルを編集し、vimを開いてその使用方法がわからない場合は、を押しiて挿入モードに入り、以下のようにファイルを編集し、escを押して:wqから挿入モードを終了します。

    [inside this square brackets give a name to the followed acc.] name = github_username email = github_emailaddress [any other name] name = github_username email = github_email [credential] helper = osxkeychain useHttpPath = true

完了しました。リポジトリからプッシュまたはプルしようとすると、どのGitHubアカウントをこのリポジトリにリンクする必要があるか尋ねられ、1回だけ尋ねられます。ローカル構成はこのリンクを記憶し、グローバル構成は記憶しないので、作業できます。毎回グローバル構成を編集する必要なしに、異なるアカウントにリンクされている異なるリポジトリに。


回答用のタグを許可する必要があります。これはMac OS用です。
user4015990 2018

5

混乱を避けるためのより簡単で簡単な修正。

Windowsユーザーが複数のプロジェクトで複数または異なるgitアカウントを使用する場合。

次の手順:コントロールパネルに移動し、資格情報マネージャーを検索します。次に、Credential Manager-> Windows Credentialsに移動します

次に、Generic Credentials見出しの下のgit:https // github.comノードを削除します。

これにより、現在の資格情報が削除されます。これで、git pullを介して任意のプロジェクトを追加でき、ユーザー名とパスワードの入力を求められます。

他のアカウントで問題が発生した場合も、同じプロセスを実行してください。

ありがとう

画像を参照


4

各リポジトリの資格情報を使用して、Windowsでこれを把握しました。

cd c:\User1\SomeRepo
git config --local credential.https://github.com.user1 user1
git config --local credential.useHttpPath true
git config --local credential.helper manager
git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

資格情報のフォーマット。https://github.com。資格情報ヘルパーに資格情報のURLを伝えます。「useHttpPath」は、資格情報のパスを使用するように資格情報マネージャーに指示します。useHttpPathが省略されている場合、資格情報マネージャーはhttps://github.comの資格情報を1つ格納します。それが含まれている場合、資格情報マネージャーは複数の資格情報を保存します。これが私が本当に欲しかったものです。


2

私はこの宝石が非常に便利であることがわかりました:sshwitch

https://github.com/agush22/sshwitch
http://rubygems.org/gems/sshwitch

sshキーを切り替えるのに役立ちます。最初にすべてをバックアップしてください。

また、コミットに正しいメールアドレスが関連付けられていることを確認するために、〜/ .gitconfigファイルに適切なメールアドレスが含まれていることを確認しました。


2

複数のアカウントに複数のSSHキーを作成する以外に、同じアカウントのメールを使用して各プロジェクトに共同編集者を追加し、パスワードを永続的に保存することもできます。

#this store the password permanently
$ git config --global credential.helper wincred

異なるメールアドレスで複数のアカウントを設定し、各ユーザーに同じユーザーとメールアドレスを共同編集者の1人として設定しました。このようにして、SSHキーを追加したり、別のユーザー名に切り替えたり、認証用のメールを送信したりせずに、すべてのアカウントにアクセスできます。


2

最も簡単で簡単なアプローチ(IMHO)-設定ファイルがなく、面倒すぎない

別のSSHキーを作成するだけです。

新しい作業用GitHubアカウントを持っているとしましょう。そのための新しいキーを作成します。

sh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_work_user1"`

今、あなたは古いものと新しいものを持っているはずです、それらを見るには、実行してください:

ls -al ~/.ssh

上記を実行する必要があるのは1回だけです。

これからは、2つを切り替えるたびに、次のコマンドを実行します。

ssh-add -D
ssh-add ~/.ssh/id_rsa_work_user1 #make to use this without the suffix .pub

古いものに切り替えるには、もう一度実行します。

 ssh-add -D
 ssh-add ~/.ssh/<previous id_rsa>

1

別の簡単な方法は、GithubデスクトップでアカウントAを使用し、Github KrakenでアカウントBを使用して、私がしているような複数のデスクトップアプリを使用することです。



1

~/.ssh/configここで言及したファイルをいじりたくない場合git config core.sshCommand "ssh -i ~/.ssh/custom_id_rsa"は、代わりに別のアカウントからコミットしたいリポジトリで実行することができます。

残りの設定は同じです:

  1. 2番目のアカウントの新しいSSHキーを作成します ssh-keygen -t rsa -f ~/.ssh -f ~/.ssh/custom_id_rsa

  2. 他のアカウントでgithubにサインインし、https://github.com/settings/keysにアクセスして、コンテンツを貼り付けます~/.ssh/custom_id_rsa.pub

  3. リモートURLとしてHTTPSではなくSSHを使用していることを確認します。 git remote set-url origin git@github.com:upstream_project_teamname/upstream_project.git



0

他の回答とは異なり、同じマシンから2つの異なるgithubアカウントを使用するにはいくつかの手順に従う必要がありますが、私にとっては2つの手順で機能しました。

あなたはただする必要があります:

1)ロケーションごとに異なる名前でアカウントごとにSSH公開鍵と秘密鍵のペアを生成し~/.ssh

2)生成された公開鍵をそれぞれのアカウントにSettings>> SSH and GPG keys>>でNew SSH Key追加します。

SSH公開鍵と秘密鍵のペアを生成するには、次のコマンドを使用します。

cd ~/.ssh
ssh-keygen -t rsa -C "email@work.com" -f "id_rsa_WORK"
ssh-keygen -t rsa -C "email@gmail.com" -f "id_rsa_PERSONAL"

上記のコマンドの結果、id_rsa_WORKおよびid_rsa_WORK.pubファイルが作成されます仕事のアカウント(EX - git.work.com)とid_rsa_PERSONALし、id_rsa_PERSONAL.pubあなたのために作成されます、個人アカウント(EX - github.com)。

作成したら、各パブリック(*.pub)ファイルからコンテンツをコピーし、各アカウントに対してステップ2を実行します。

PS~/.ssh/config2つのアカウントのホスト名が異なる場合、他の回答で述べられているように、ファイルの下の各gitアカウントにホストエントリを作成する必要はありません。


ローカルPCで2つのアカウントをどのように切り替えますか?
user4015990 2018

1
切り替える必要はありません。ローカルでリポジトリを複製するたびに、アカウント情報はgitによってローカルリポジトリに保存されます。したがって、そのローカルリポジトリ内でgit pushまたはpullを実行するたびに、上記の構成により、考慮すべきアカウントが検出されます。
Sahil Chhabra

0

あなたがしているために起こる場合はWSLは、 WSLの1とWindowsでの1 -インストール次の2つの別々のGitのアカウントを持つことができます。


0

一般的な認証情報を使用してプロジェクトにプッシュする必要があります。新しいマシンで起動したら、次の手順でgitlab認証情報をセットアップして正しく使用します。

  • マシンに公開/秘密のsshキーを作成する
  • 公開鍵をgitlab / github uiインターフェースにコピーして貼り付けます(cmd行で操作方法を示唆している人は誰でも無料のビールを手に入れます...)
  • http urlではなくgitを介してリポジトリを複製してください
  • gitエイリアスを設定して、gitコマンドに同じプレフィックスを何度も入力しないようにします
  • git commit中は常に作成者と電子メールのフラグを使用してください
  • gitを通常どおり使用します

これはすべて次のとおりです。

 # create the public / private key credentials on that specific machine
 ssh-keygen -t rsa -b 4096 -C "<<you>>@org.net" -f ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # setup your public key in the gitlab ui 
 cat ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # make sure you clone the repo via the git and not http url
 git clone git@git.in.org.net:org/some-repo.git

 # set the git alias to avoid constant typing of the repeating prefix to the git cmd
 alias git='GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.<<you>>.`hostname -s`" git'

 # during git commit ALWAYS use the author and e-mail flags
 git add --all ; git commit -nm "$git_msg" --author "YourFirstName YourLastName <you@phz.fi>"

 # use git as normal
 git fetch --all; git pull --all 

0
  1. 変更を別のGitHubアカウントにプッシュするディレクトリに移動します。
  2. ターミナル/コマンドラインで新しいSSHキーを作成します。

    ssh-keygen -t rsa -C「your-email-address」

  3. 次のように表示されます。

    公開/秘密のRSAキーペアを生成しています。キーを保存するファイルを入力(/home/your_username/.ssh/id_rsa):

パスをコピーして貼り付け、ファイルの識別可能な名前を続けます。

/home/your_username/.ssh/id_rsa_personal

4)次に、次のように求められます。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

5)次のコマンドを入力して、ローカルマシンにあるすべてのSSHキーを表示できます。

ls -al ~/.ssh

新しいSSHキーファイルが表示されます。ご覧のとおり、id_rsa_testとid_rsa_personal.pubの両方があります。

drwx------  2 gmadmin gmadmin 4096 Nov 16 22:20 .
drwxr-xr-x 42 gmadmin gmadmin 4096 Nov 16 21:03 ..
-rw-------  1 gmadmin gmadmin 1766 Nov 16 22:20 id_rsa_personal
-rw-r--r--  1 gmadmin gmadmin  414 Nov 16 22:20 id_rsa_personal.pub
-rw-r--r--  1 gmadmin gmadmin  444 Nov  6 11:32 known_hosts

6)次に、id_rsa_personal.pubファイルに保存されているSSHキーをコピーする必要があります。これは任意のテキストエディターで開くことができます。私は現在アトムを使用しているので、次のコマンドを使用してファイルを開きました。

atom ~/.ssh/id_rsa_personal.pub

次に、次のようなものが表示されます。

ssh-rsa AAB3HKJLKC1yc2EAAAADAQABAAABAQCgU5 + ELtwsKkmcoeF3hNd7d6CjW + dWut83R / Dc01E / YzLc5ZFri18doOwuQoeTPpmIRVDGuKWYWXVQWQLQWQLQWQLQWQLQWQLQWQLQWQLQWQLQWQLQWQLQWQLQWQLQWQLQWQLQWQLQWYLQWQLQWYLQWYLQWQLQWYLQWYLQLQWYL

7)これをコピーして、GitHubアカウント→設定→SSHおよびGPGキーに移動します。8)新しいSSHキーをクリックします。キーをコピーし、タイトルを付けて追加します。9)端末からキーを追加

ssh-add ~/.ssh/id_rsa_personal
Enter passphrase for /home/your_username/.ssh/id_rsa_personal: 

10)ユーザーとパスワードを設定します。

git config --global user.name "gitusername"
git config --global user.email "gitemail"

11)これでコミットしてプッシュする準備ができました。

git init
git add .
git commit 
git push

0

別のリポジトリーを作成または複製していて、次のコマンドを使用してそのディレクトリーでssh鍵をプルoriginまたはupstream追加できなかった場合は、機能しました。

これは私がここで得ていたエラーです:

Warning: Permanently added the RSA host key for IP address '61:fd9b::8c52:7203' to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

私は次のコマンドを使用しました、これはうまくいきます:

ssh-add ~/.ssh/id_rsa_YOUR_COMPANY_NAME

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