我在使用两个不同的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
.
安迪莱斯特的反应是准确的,但我找到了一个重要的额外步骤,我需要做的是让这个工作.在尝试设置两个配置文件时,一个用于个人配置,一个用于工作,我~/.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
我最近不得不这样做,不得不筛选所有这些答案和他们的评论,最终将信息拼凑在一起,所以为了您的方便,我将把它全部放在这里,在一篇文章中:
第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).但现在你应该好好去!:)
假设alice
是一个github.com用户,拥有2个或更多私有存储库repoN
.对于此示例,我们将仅使用两个名为repo1
and的存储库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)
您现在将新的公钥放在repo2
github.com 上的部署密钥配置中,但现在您有一个ssh问题需要处理.
github.com
域上,ssh如何判断使用哪个密钥?你的.ssh/config
文件指向github.com
并且它不知道在拉动时使用哪个键.
所以我在github.com上找到了一个技巧.您可以告诉您的ssh客户端每个存储库位于不同的github.com子域中,在这些情况下,它们将是repo1.github.com
和repo2.github.com
首先是编辑.git/config
repo克隆上的文件,所以它们看起来像这样:
对于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个钥匙和回购.您将拥有更多要处理的密钥,但如果受到攻击,您将不那么容易受到攻击.
我在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时,这是后面的值,这就是Host
repo映射到Host的方式,例如Hostname
[以下是子选项github.com
]
User
指定实际的主机名,只git
用于github,
IdentityFile
git
用户总是LogLevel
为github,
DEBUG3
指定要使用的密钥,只需将路径设为公钥,
linux
指定要调试的日志级别,如果有任何问题,则ssh-keygen
提供最详细的信息.
使用以下IdentityFile
参数~/.ssh/config
:
Host github.com HostName github.com IdentityFile ~/.ssh/github.rsa User petdance