我在让 SSH 代理转发有效地为两个用户工作方面遇到了极大的困难。
两者都可以毫无问题地登录到远程服务器,并且看起来他们的代理被正确转发(在服务器上,“echo $SSH_AGENT_SOCK”返回对存储在 /tmp/ssh-blahblahbla/agent.blahblah 上的套接字的引用),但是两个用户都无法在通过 ssh 登陆任何其他服务器后通过 ssh 进入其他服务器,也无法从通过 ssh 托管和访问的 git 存储库中提取数据。
所有这些对于其他所有用户来说都运行良好。我注意到的唯一区别是,出于某种无法解释的原因,当这些问题用户通过 ssh 进入第一台服务器并尝试连接到第二台服务器时,ssh 详细输出显示以下内容:
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/ubuntu/.ssh/identity ((nil))
debug2: key: /home/ubuntu/.ssh/id_rsa ((nil))
debug2: key: /home/ubuntu/.ssh/id_dsa (0x7ff42705ab40)
debug3: Wrote 64 bytes for a total of 1127
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred gssapi-keyex,gssapi-with-mic,gssapi,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/ubuntu/.ssh/identity
debug3: no such identity: /home/ubuntu/.ssh/identity
debug1: Trying private key: /home/ubuntu/.ssh/id_rsa
debug3: no such identity: /home/ubuntu/.ssh/id_rsa
debug1: Offering public key: /home/ubuntu/.ssh/id_dsa
对于成功的用户,前几行从他们的 $SSH_AUTH_SOCK 引用 /tmp 中的套接字。我很困惑,有什么可以帮忙从哪里开始查找的吗?
另外,作为参考,它不一定是特定于密钥的。对于一个用户,我尝试生成两个新密钥(一个是不同类型的,另一个是不同的加密方式),但都没有用。
有什么想法吗?
答案1
我发现,尽管代理密钥已被转发,但两个用户都没有身份。
使用以下方法检查本地机器:
ssh-add -L
如果您看到:代理没有身份。
您可能还需要输入:
ssh-add
这解决了我们的问题。希望它能帮助其他人。
在一个案例中,用户有一个本地身份,但该身份不是他正在使用的密钥,而是在另一个环境中使用的备用密钥。由于他可以在此环境中按预期进行代理转发,因此我们觉得问题出在服务器端。为了添加特定身份,我们使用
ssh-add ~/.ssh/his-alternate-keyfile