当我尝试使用OpenSSH 客户端的Could not open a connection to your authentication agent
代理转发选项 ( ) 从中间服务器连接到第三台服务器时,收到一条错误消息。使用加载到 中的密钥,第一次连接到中间服务器非常顺利。尝试连接到最终服务器时会显示错误消息。-A
ssh-agent
我的 OpenSSH 客户端设置为允许ForwardAgent yes
在 中进行转发~/.ssh/config
,中间服务器已AllowAgentForwarding yes
在守护进程的配置文件中。客户端配置不会被系统级文件覆盖。
我没有使用终端多路复用器,以避免因未设置环境变量而导致的错误。要运行代理,我使用exec ssh-agent zsh
并验证和都SSH_AUTH_SOCK
存在SSH_AGENT_PID
于本地环境中。我ssh-add
分别使用添加中间服务器和最终服务器的私钥;我使用验证它们是否已添加ssh-add -l
。
所有服务器都是较新版本(OpenSSH 5.3),客户端是 OpenSSH 6.2。
答案1
我在这里发布这个是因为我花了很多时间尝试使用 Google 寻找解决方案、阅读手册页并查阅有关 SSH 的流行书籍,但都无济于事。
找到问题的关键是仔细研究调试输出。
debug1: Remote: Agent forwarding disabled: mkdtemp() failed: Permission denied
中间机器是使用 AWS 堆栈的云提供商托管的虚拟服务器 (RHEL 6.4)。由于我无法解释的原因,目录上的权限设置/tmp
为:
drwxr-x--- 19 727 727 4096 Nov 28 05:30 tmp
通过 Grep 搜索,/etc/passwd
我找不到 ID 为 727 的用户。
像这样纠正权限解决了我的困境:
sudo chown 0:0 /tmp
sudo chmod 1777 /tmp
有人能谈谈该/tmp
目录的特殊所有权吗?
答案2
对于任何寻求整个过程来转发密钥并获取调试日志以及修复的人来说,它如下:
创造~/.ssh/config
Host [IP of HOST]
ForwardAgent yes
运行 ssh-agent
eval "$(ssh-agent)"
添加您想要转发到 ssh 代理的密钥:
ssh-add [path to key if there is one]/[key_name].pem
登录远程主机:
ssh -A -v [user]@[hostname]
查看 ssh 上的调试日志
debug1: Remote: Agent forwarding disabled: mkdtemp() failed: Permission denied
Last login: Tue Nov 10 22:57:07 2020 from 10.100.28.239
登录远程计算机时查看 tmp 权限。确保用户有权访问该tmp
文件夹
ls -la /tmp/
sudo chown 0:0 /tmp
sudo chmod 1777 /tmp
我的问题是,我创建了一个用户来运行服务器,但该用户没有临时文件夹所需的权限。我不想使用 root,因为这不是最佳做法。修复方法是一样的。:)