当前位置:  开发笔记 > 运维 > 正文

多个GitHub帐户和SSH配置

如何解决《多个GitHub帐户和SSH配置》经验,为你挑选了5个好方法。

我在使用两个不同的SSH密钥/ GitHub帐户以便一起玩时遇到一些麻烦.我有以下设置:

Repos可从一个帐户使用 git@github.com:accountname

Repos可从其他帐户使用 git@github.com:anotheraccount

每个帐户都有自己的SSH密钥.已添加两个SSH密钥,我已创建配置文件.我不相信配置文件是正确的.我不太确定如何指定使用的repos git@github.com:accountname应该使用id_rsa并且git@github.com:anotheraccount应该使用id_rsa_anotheraccount.



1> 小智..:

安迪莱斯特的反应是准确的,但我找到了一个重要的额外步骤,我需要做的是让这个工作.在尝试设置两个配置文件时,一个用于个人配置,一个用于工作,我~/.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/1760313


谢谢! - ssh-add`就是我所缺少的.
要修复"它们默认为第一个公钥"的问题,将`IdentitiesOnly yes`添加到`〜/ .ssh/config`文件的`Host*`部分.这告诉ssh实际使用您指定的IdentityFiles,而不是用所有这些标识符向服务器发送垃圾邮件.
另请参见http://doblock.com/articles/using-public-keys-with-multiple-github-accounts.关键的新信息是,您可能需要将用户名(在此示例中为"work")添加到远程URL中的主机名,即git@work.github.com:work/my_repo.git(as反对"git@github.com ......")

2> stefano..:

我最近不得不这样做,不得不筛选所有这些答案和他们的评论,最终将信息拼凑在一起,所以为了您的方便,我将把它全部放在这里,在一篇文章中:


第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
您可能需要也可能不需要执行此操作.要检查,请运行以下列出身份指纹:

$ 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.

请注意,您必须根据您要使用的密钥/标识更改主机名(github/work.github).但现在你应该好好去!:)



3> Gubatron..:

假设alice是一个github.com用户,拥有2个或更多私有存储库repoN.对于此示例,我们将仅使用两个名为repo1and的存储库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不输入密码的情况下执行操作.

但是第二个存储库怎么样?

因此,你的直觉是获取该密钥并将其添加到repo2部署密钥,但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)

您现在将新的公钥放在repo2github.com 上的部署密钥配置中,但现在您有一个ssh问题需要处理.

如果存储库托管在同一个github.com域上,ssh如何判断使用哪个密钥?

你的.ssh/config文件指向github.com并且它不知道在拉动时使用哪个键.

所以我在github.com上找到了一个技巧.您可以告诉您的ssh客户端每个存储库位于不同的github.com子域中,在这些情况下,它们将是repo1.github.comrepo2.github.com

首先是编辑.git/configrepo克隆上的文件,所以它们看起来像这样:

对于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个钥匙和回购.您将拥有更多要处理的密钥,但如果受到攻击,您将不那么容易受到攻击.



4> Eric Wang..:

我在github上有两个帐户,这是我做的(上linux)使它工作.

按键

创建2对rsa键,通过ssh-keygen,正确命名,以便让生活更轻松.

通过私钥添加私钥到本地代理 ssh-add path_to_private_key

对于每个github帐户,上传(不同的)公钥.


组态

的〜/ .ssh /配置

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

为repo设置远程URL:

对于主持人的回购github-kc:
github-abc

对于主持人的回购~/.ssh/config:
Host


选项github-kc:

git@github-
主机可以是任何可以识别主机和帐户的值,它不需要是真正的主机,例如 git remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git在github上为我的本地笔记本电脑识别我的一个帐户,

当为git repo设置远程url时,这是后面的值,这就是Hostrepo映射到Host的方式,例如Hostname


[以下是子选项github.com]

User
指定实际的主机名,只git用于github,

IdentityFilegit
用户总是LogLevel为github,

DEBUG3
指定要使用的密钥,只需将路径设为公钥,

linux
指定要调试的日志级别,如果有任何问题,则ssh-keygen提供最详细的信息.




5> Andy Lester..:

使用以下IdentityFile参数~/.ssh/config:

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

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有