多个 ssh 别名在转发时选择了错误的用户

多个 ssh 别名在转发时选择了错误的用户

我正在关注bitbucket 的双重身份程序

我有 2 个 bitbucket 帐户ccmcbeckchrisbeck。前者是个人帐户,后者是工作帐户。

在我的本地 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 本地私钥,并将其副本放在.pubauthorized_keys。希望这对您有所帮助。

编辑2:

...或者您可以关注这个超级用户的回答通过从转发代理中指定其公共对应方来选择您希望使用的私钥。答案仍然需要使用选项IdentitiesOnly yes

相关内容