如何让 Ubuntu 根账户作为转发机器来转发 ssh 密钥

如何让 Ubuntu 根账户作为转发机器来转发 ssh 密钥

更新:下面描述的所有内容适用于非根远程机器上的帐户。

也就是说,这是有效的:

anderson@client -> nonroot@remote -> anderson'[email protected]

这确实不是但是可以工作:

anderson@client -> root@remote -> anderson'[email protected]

所以问题实际上是,当中间的机器是 root 时,如何使 ssh 代理转发工作?


本地机器(OSX)已在 ~/.ssh/config 文件中打开转发:

Host remotehost
    ForwardAgent yes

本地机器不会覆盖 /etc/ssh/ssh_config 中的此设置。

Host *
#   ForwardAgent no

本地机器正在运行 ssh-agent:

anderson$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-L0iFZ891Gv/agent.75083; export SSH_AUTH_SOCK;
SSH_AGENT_PID=75084; export SSH_AGENT_PID;
echo Agent pid 75084;

已对密钥执行了 ssh-add:

anderson$ ssh-add -K ~/.ssh/id_rsa
Passphrase updated in keychain: /Users/anderson/.ssh/id_rsa
Identity added: /Users/anderson/.ssh/id_rsa (/Users/anderson/.ssh/id_rsa)

$SSH_AUTH_SOCK 在那里:

anderson$ echo $SSH_AUTH_SOCK
/tmp/launch-pg2gVc/Listeners

ssh key 已经上传至 GitHub 并生效:

anderson$ ssh -T [email protected]
Hi [elided]! You've successfully authenticated, but GitHub does not provide shell access.

远程机器(Ubuntu 12.04LTS)具有来自本地机器的公共 ssh 密钥,并且可以正常工作:

anderson$ ssh root@remotehost
[root@host1~]#

远程计算机已配置 AllowAgentForwarding:

[root@host1~]# head /etc/ssh/sshd_config
# Package generated configuration file
# See the sshd_config(5) manpage for details

AllowAgentForwarding yes

事情出现问题的地方是:在远程计算机上找不到 SSH_AUTH_SOCK:

[root@host1~]# echo $SSH_AUTH_SOCK

**crickets**

当然,密钥转发也无处可寻:

[root@host1~]# ssh -T [email protected]
Permission denied (publickey).

即使这样强制也不起作用:

anderson$ ssh -A root@remotehost

调试输出:

anderson$ ssh -vvv -A root@remotehost
OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /Users/anderson/.ssh/config
debug1: Applying options for remotehost
debug1: Applying options for *
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug1: auto-mux: Trying existing master
debug2: fd 3 setting O_NONBLOCK
debug2: mux_client_hello_exchange: master version 4
debug3: mux_client_request_forwards: requesting forwardings: 0 local, 0 remote
debug3: mux_client_request_session: entering
debug3: mux_client_request_alive: entering
debug3: mux_client_request_alive: done pid = 45287
debug3: mux_client_request_session: session request sent
debug1: mux_client_request_session: master session id: 3

所以我是不是漏掉了什么?我觉得我已经了解了调试的所有基础。还有什么可以检查的吗?

答案1

我遇到过类似的情况,原因是我使用的包装器正在设置ControlPath选项,SSH 也卡在了debug1: mux_client_request_session: master session id: 3。删除 中指定的目录ControlPath已解决问题。

相关内容