我正在为新的 Linode Ubuntu 12.04LTS 部署添加 ssh 身份验证。我遵循他们的指南直到我需要使用我刚添加的 ssh 密钥通过 ssh 进入该框,但我得到的却是:
"Error: agent admitted failure to sign using the key"
这很好,Ubuntu OpenSSH 指南说你需要做的就是运行
ssh-add
在服务器上,你就会成功。但当我这样做时,我得到了
Could not open a connection to your authentication agent.
我仔细检查了这些进程,发现 ssh-agent 确实已经在运行(实际上已经运行了两次,因为我尝试过评估技巧,根本不起作用):
alex@mybox:~$ ps aux | grep ssh
root 2645 0.0 0.1 49948 776 ? Ss Mar13 0:00 /usr/sbin/sshd -D
alex 16989 0.0 0.0 12492 324 ? Ss Mar13 0:00 ssh-agent
root 18986 0.0 0.7 73360 3564 ? Ss 09:03 0:00 sshd: alex [priv]
alex 19119 0.0 0.3 73360 1676 ? S 09:03 0:00 sshd: alex@pts/0
alex 19785 0.0 0.0 12492 316 ? Ss 09:59 0:00 ssh-agent
root 20026 0.0 0.7 73360 3568 ? Ss 10:02 0:00 sshd: alex [priv]
alex 20184 0.0 0.3 73360 1680 ? S 10:03 0:00 sshd: alex@pts/1
alex 20325 0.0 0.1 9384 924 pts/1 S+ 10:13 0:00 grep --color=auto ssh
正如我所提到的,eval 方法曾成功使 ssh-add 工作过一次,但当我尝试再次登录时,系统报告了上述相同的错误。我现在也有两个 ssh-agent 实例。
解决这个问题的正确方法是什么?
答案1
尝试为当前 bash 会话启动 ssh-agent。以下是您需要执行的操作。
测试当前 ssh-agent PID 的环境:
env | grep ^SSH
如果您没有注意到任何内容,请启动当前环境的 ssh-agent:
exec ssh-agent bash
现在尝试添加密钥:
ssh-add
答案2
确保SSH_AGENT_PID
环境变量设置为 SSH 代理的 PID,并将其SSH_AUTH_SOCK
设置为代理套接字的路径(通常在目录中/tmp
,例如/tmp/ssh-wpNhPp3007/agent.3007
:)
ssh-add
可以使用这些变量来添加您的密钥。
答案3
您还可以使用以下语法:
ssh-agent sh -c 'ssh-add && echo Do some stuff here.'
答案4
您的问题在于客户,而不是在服务器上。运行 sshd 的系统不关心 ssh-add/ssh-agent。它只检查客户端系统是否能够进行授权数字签名。此签名是由 ssh、ssh-agent 还是智能卡生成的都没有区别。
如果您不使用其中一个标准文件(例如 ~/.ssh/id_rsa_newbox),那么您必须告诉 ssh(-i ~/.ssh/id_rsa_newbox) or ssh-agent (
ssh-add ~/.ssh/id_rsa_newbox`)使用这个非标准文件。