我正在关注bitbucket 的双重身份程序:
我有 2 个 bitbucket 帐户ccmcbeck
和chrisbeck
。前者是个人帐户,后者是工作帐户。
在我的本地 Mac 上,我有这个~/.ssh/config
Host *.work.com
User chris
ForwardAgent yes
IdentityFile ~/.ssh/work_dsa
Host bitbucket-personal
HostName bitbucket.org
User ccmcbeck
ForwardAgent no
IdentityFile ~/.ssh/bitbucket_ccmcbeck_rsa
Host bitbucket-work
HostName bitbucket.org
User chrisbeck
ForwardAgent no
IdentityFile ~/.ssh/bitbucket_chrisbeck_rsa
在我的本地 Mac 上ssh -T
一切正常,我得到:
$ ssh -T git@bitbucket-personal
logged in as ccmcbeck.
$ ssh -T git@bitbucket-work
logged in as chrisbeck.
在我的本地 Mac 上,ssh 版本是OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
当我ssh foo.work.com
进入我的 Linux 机器时,我得到:
$ ssh-add -l
1024 ... /Users/chris/.ssh/work_dsa (DSA)
2048 ... /Users/chris/.ssh/bitbucket_ccmcbeck_rsa (RSA)
2048 ... /Users/chris/.ssh/bitbucket_chrisbeck_rsa (RSA)
在foo.work.com
我的~/.ssh/config
Host bitbucket-personal
HostName bitbucket.org
User ccmcbeck
ForwardAgent no
IdentityFile ~/.ssh/bitbucket_ccmcbeck_rsa
Host bitbucket-work
HostName bitbucket.org
User chrisbeck
ForwardAgent no
IdentityFile ~/.ssh/bitbucket_chrisbeck_rsa
然而,foo.work.com
当我ssh -T
,它引用了错误的用户git@bitbucket-work
$ ssh -T git@bitbucket-personal
logged in as ccmcbeck.
$ ssh -T git@bitbucket-work
logged in as ccmcbeck.
开启foo.work.com
,ssh 版本为OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
为什么我的配置导致foo.work.com
引用错误的用户?
答案1
在我看来,最可能的解释是 ssh-agent 随时都在使用它加载的任何密钥。您可以使用IdentitiesOnly
配置文件中的指令来删除此行为,如下所示:
Host bitbucket-personal
HostName bitbucket.org
User ccmcbeck
ForwardAgent no
IdentityFile ~/.ssh/bitbucket_ccmcbeck_rsa
IdentitiesOnly yes
Host bitbucket-work
HostName bitbucket.org
User chrisbeck
ForwardAgent no
IdentityFile ~/.ssh/bitbucket_chrisbeck_rsa
IdentitiesOnly yes
来自ssh man page
:
指定 ssh(1) 应仅使用 ssh_config 文件中配置的身份验证身份文件,即使 ssh-agent(1) 提供了更多身份。此关键字的参数必须是“yes”或“no”。此选项适用于 ssh-agent 提供许多不同身份的情况。默认值为“no”。
编辑:
在您的帖子的最后有这样几行:
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/chrisb/.ssh/bitbucket_chrisbeck_rsa ((nil))
debug1: Authentications that can continue: publickey
它们清楚地表明此密钥未被接受。这就是为什么您总是以 ccmcbeck 身份登录:该密钥有效,如果没有IdentitiesOnly yes
,客户端会尝试其他密钥,直到找到有效的密钥。通过引入此限制,我们至少澄清了问题的性质。
由于从 Mac 看来您似乎没有遇到这样的问题,因此问题肯定出在 Linux 客户端上,特别是您尝试使用的私钥。最好的办法是生成一个新的 Linux 本地私钥,并将其副本放在.pub
中authorized_keys
。希望这对您有所帮助。
编辑2:
...或者您可以关注这个超级用户的回答通过从转发代理中指定其公共对应方来选择您希望使用的私钥。答案仍然需要使用选项IdentitiesOnly yes
。