使用
git@github.com:accountname
可从一个帐户访问存储库使用
git@github.com:anotheraccount
可从另一个帐户访问存储库每个帐户都有自己的SSH键。两个SSH密钥均已添加,并且我创建了一个配置文件。我不相信配置文件是正确的。我不太确定如何指定使用
git@github.com:accountname
访问的存储库应该使用id_rsa
和git@github.com:anotheraccount
应该使用id_rsa_anotheraccount
。 #1 楼
安迪·莱斯特(Andy Lester)的回答是准确的,但我发现我需要采取一个重要的额外步骤来使其正常工作。在尝试设置两个个人资料时,我的~/.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是我所缺少的。
–圣人
2011-12-20 6:46
通过使用ssh-add,我可以看到我没有正确设置密钥的文件权限。一旦我修复一切正常。那谢谢啦!
–phatmann
2012年1月13日15:55
另请参见doblock.com/articles/…。关键的新信息是,您可能需要将用户名(在此示例中为“ work”)添加到远程URL中的主机名,即git@work.github.com:work / my_repo.git(如反对“ git@github.com ...”)
– Bobs
2012年3月24日19:33
这有效:superuser.com/questions/232373/…
–卡西
2012年3月28日在21:16
要解决“它们默认为第一个公共密钥”的问题,请在〜/ .ssh / config文件的Host *部分中添加IdentitiesOnly yes。这告诉ssh实际使用您指定的IdentityFiles,而不是将所有文件都发送给服务器。
–机械蜗牛
2012年5月9日7:18
#2 楼
最近,我不得不这样做,并且不得不仔细筛查所有这些答案及其评论以最终将信息拼凑起来,因此为了方便起见,我将所有这些信息放在一篇文章中,以方便您: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)。但是现在你应该很好走了! :)
评论
这是一个很好的回应。我不得不使用ssh-add来添加两个ssh密钥以利用配置文件。。谢谢:)
– gaurav.singharoy
2014年4月23日19:05
我唯一要添加的是运行ssh-keygen -t rsa时,它将为您提供一个默认文件名,即在其中输入自定义文件名的位置。
–多纳托
16-09-26在16:29
最佳答案之一。这个视频也帮助了我。 youtube.com/watch?v=fnSRBRiQIU8&feature=youtu.be
–TestingWithArif
18 Mar 4 '18 at 11:58
好的帖子,如果这篇帖子包括设置您的git config'email',那就太好了:help.github.com/articles/…
–戴维工程师
18/12/7在16:39
如果在执行“ ssh-agent”时其他人遇到“连接到代理时出错”,请查看stackoverflow.com/questions/52113738/…
– Uniquegino
2天前
#3 楼
假设alice
是github.com用户,具有2个或更多私有存储库repoN
。在这个示例中,我们将仅使用名为repo1
和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
文件,并且将远程origin
的网址修改为如下所示:[remote "origin"]
url = "ssh://git@github.com/alice/repo1.git"
最后,您进入了存储库
Settings > Deploy keys
部分,并添加了alice_github.id_rsa.pub
的内容此时,您可以执行
git pull origin master
而不用输入密码而不会出现问题。但是第二个存储库又如何呢?
因此,您的本能将是获取该密钥并将其添加到
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上的公共密钥,但是现在您需要处理ssh问题。 如果存储库位于相同的
github.com
域上,那么ssh如何分辨使用哪个密钥?您的
.ssh/config
文件指向github.com
,它不知道何时需要执行拉动操作。所以我在github.com上找到了一个窍门。您可以告诉ssh客户端,每个存储库都位于不同的github.com子域中,在这种情况下,它们分别是
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个密钥并重新存储。您将拥有更多要处理的密钥,但是如果密钥被盗用,您将不那么容易受到攻击。
评论
在.ssh / config中指定与主机匹配的子域是至关重要的步骤-非常感谢
–迈克·米勒(Mike Miller)
18年5月11日在10:57
#4 楼
我在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
中的选项:Host
github- 主机可以是可以标识主机和帐户的任何值,
不必是真实的主机,
例如
github-kc
可以识别一个主机我在github上的帐户的本地笔记本电脑,
当为git repo设置远程URL时,这就是值放在
git@
之后,这就是回购映射到主机的方式,例如git remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git
[以下是
Host
的子选项] Hostname
指定实际的主机名,只需对github使用
github.com
,User
git 用户对于github总是
git
,IdentityFile
指定要使用的密钥,只需将路径设置为公共密钥,
LogLevel
指定要调试的日志级别,如果有问题,
DEBUG3
提供最详细的信息。评论
可爱的-不需要ssh-add path_to_private_key-可能是因为在这种情况下不需要代理。配置文件显式定义了键的路径。
– Mark Chackerian
16年5月26日在22:05
@MarkChackerian我认为您不需要ssh-add,因为您的密钥不受密码保护,或者(如果您使用的是Mac,则)OSX密钥链正在为您处理。 ssh-add防止您每次访问密钥时都需要输入密码。
–阿什哈尔·哈桑(Ashhar Hasan)
16-10-10在22:53
太好了,这就是我想要的。谢谢
–达瓦尔
2天前
#5 楼
在您的IdentityFile
中使用~/.ssh/config
参数:Host github.com
HostName github.com
IdentityFile ~/.ssh/github.rsa
User petdance
评论
谢谢,但这不是很准确。我找到了答案并在下面分享。
– radesix
2010年7月12日在4:36
我敢肯定,我的方法将对您有效。您可以标识不同的用户和不同的标识文件。只需在config节中为每个主机赋予不同的Host参数。
–安迪·莱斯特(Andy Lester)
10年7月12日在4:48
安迪,根据我在下面找到的链接,我需要从主机删除.com。一旦我这样做,它就可以正常工作。
– radesix
2010年7月13日在14:30
#6 楼
编辑ssh配置文件(所有其他答案均建议)的一种可能更简单的替代方法是,将单个存储库配置为使用其他(例如非默认)ssh密钥。在要使用其他密钥的存储库中,运行:
git config core.sshCommand 'ssh -i ~/.ssh/id_rsa_anotheraccount'
并确保将您的密钥添加到了ssh-agent,请运行以下命令:
ssh-add ~/.ssh/id_rsa_anotheraccount
请记住,以上命令只会为当前会话的ssh-agent添加密钥。如果您希望此操作永久有效,则必须“永久”将其添加到ssh-agent中。例如,这是针对ubuntu的方法,以及OSX的方法。
还应该可以使用全局git config和条件包含将这种方法扩展到多个存储库(请参见示例)。
#7 楼
我花了很多时间来了解所有步骤。因此,让我们逐步进行描述:使用
ssh-keygen -t rsa
创建新的身份文件。给它一个类似proj1.id_rsa
的替代名称,因为不需要密码,因此毫无疑问会命中。在
.ssh/config
中添加新部分:Host proj1.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/proj1.id_rsa
请考虑到第一部分,并注意我们稍后将返回该部分。
将身份添加到ssh代理
proj1.github.com
那是我第一次弄错的-现在,当您想克隆proj1存储库时,可以使用
ssh-add ~/.ssh/proj1.id_rsa
(恰好是配置文件中的主机)来完成。proj1.github.com
。一个很好的教程。 br />
不要搞乱主机
评论
感谢您与turorial的链接!您有一个错字:键名id_rsa_proj1和proj1_id_rsa实际上应该相同。您也可以将本教程中有关.git / config设置的部分添加到答案中。
–cezar
18年2月2日在12:46
您仍然有错别字:proj1.id_rsa与proj1_id_rsa
–cezar
18年2月2日在14:50
#8 楼
就我而言,上述解决方案都不能解决我的问题,但是ssh-agent可以解决。基本上,我执行了以下操作:使用下面所示的ssh-keygen生成密钥对。它将生成一个密钥对(在本示例中为
.\keyfile
和.\keyfile.pub
)ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfile
将
keyfile.pub
上载到git provider 在计算机上启动ssh-agent(您可以使用
ps -ef | grep ssh-agent
进行检查以查看其是否已经在运行)运行
ssh-add .\keyfile
以添加凭据现在您可以运行
git clone git@provider:username/project.git
#9 楼
作为@stefano回答的补充,在为另一个帐户生成新的SSH密钥时,最好在
-f
上使用命令。ssh-keygen -t rsa -f ~/.ssh/id_rsa_work -C "your@mail.com"
id_rsa_work
文件在路径~/.ssh/
中不存在,我手动创建了此文件,但它不起作用:( <>#10 楼
我用过,Host github.com
HostName github.com
IdentityFile ~/.ssh/github_rsa
User abc@gmail.com
很好用。
在.ssh / config文件中对不同的用户名使用不同的rsa密钥使用上面的设置。
#11 楼
我在这里发布了用于处理这些问题的技术#12 楼
请按照以下步骤操作,以解决它看起来太长的问题,但是请相信我,它不会花费超过5分钟的时间:步骤1:创建两个ssh密钥对:
ssh-keygen -t rsa -C "your_email@youremail.com"
步骤2:它将在此处创建两个ssh密钥:
~/.ssh/id_rsa_account1
~/.ssh/id_rsa_account2
步骤3:现在我们需要添加以下密钥:
ssh-add ~/.ssh/id_rsa_account2
ssh-add ~/.ssh/id_rsa_account1
您可以看到使用以下命令添加密钥列表:
ssh-add -l
您可以通过以下命令删除旧的缓存密钥:
ssh-add -D
步骤4:修改ssh config
cd ~/.ssh/
touch config
subl -a config
或code config
或nano config
步骤5:将其添加到配置文件中:
#Github account1
Host github.com-account1
HostName github.com
User account1
IdentityFile ~/.ssh/id_rsa_account1
#Github account2
Host github.com-account2
HostName github.com
User account2
IdentityFile ~/.ssh/id_rsa_account2
步骤6:更新您的
.git/config
文件:步骤6.1:导航到account1的项目并更新主机:
[remote "origin"]
url = git@github.com-account1:account1/gfs.git
如果其他用户在其git存储库中邀请您。
那么您需要像这样更新主机:
[remote "origin"]
url = git@github.com-account1:invitedByUserName/gfs.git
步骤6.2:导航到account2的项目并更新主机:
[remote "origin"]
url = git@github.com-account2:account2/gfs.git
步骤7:更新每个存储库的用户名和电子邮件如果需要,请分别y,这不是一个修订步骤:
导航到account1项目并运行它们:
git config user.name "account1"
git config user.email "account1@domain.com"
导航到account2项目并运行它们:
git config user.name "account2"
git config user.email "acccount2@doamin.com"
评论
我发现此链接很有帮助medium.freecodecamp.org/…我在〜/ .ssh / config中有3个单独的SSH身份。一个用于学校服务器的密码。单独的工作/个人GitHub权限的2没有。尽管单独的身份文件,“ IdentitiesOnly = yes”,单独的域和主机名都存在于ssh-add -l中,但运行git pull一直失败并要求学校提供密码,无论设置如何,uni键都是“ first” 。不得不将其部分移到.ssh / config中的其他部分之下,现在从两个GitHub accts的git pull都成功了,并且没有要求uni ssh密码。
在此处可以详细解答superuser.com/questions/232373/…