为什么ssh代理转发不起作用?


57

在运行MacOSX的我自己的计算机上,我将它放在〜/ .ssh / config中

Host *
ForwardAgent yes
Host b1
ForwardAgent yes

b1是运行Ubuntu 12.04的虚拟机。我像这样ssh:

ssh pupeno@b1

并且我已经登录,而无需输入密码,因为我已经复制了公钥。由于转发,我应该能够从b1 ssh到pupeno @ b1,它应该可以正常工作,而无需询问密码,但是没有。它要求我输入密码。

我想念什么?

这是第二个ssh的详细输出:

pupeno@b1:~$ ssh -v pupeno@b1
OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 Mar 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to b1 [127.0.1.1] port 22.
debug1: Connection established.
debug1: identity file /home/pupeno/.ssh/id_rsa type -1
debug1: identity file /home/pupeno/.ssh/id_rsa-cert type -1
debug1: identity file /home/pupeno/.ssh/id_dsa type -1
debug1: identity file /home/pupeno/.ssh/id_dsa-cert type -1
debug1: identity file /home/pupeno/.ssh/id_ecdsa type -1
debug1: identity file /home/pupeno/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA 35:c0:7f:24:43:06:df:a0:bc:a7:34:4b:da:ff:66:eb
debug1: Host 'b1' is known and matches the ECDSA host key.
debug1: Found key in /home/pupeno/.ssh/known_hosts:1
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/pupeno/.ssh/id_rsa
debug1: Trying private key: /home/pupeno/.ssh/id_dsa
debug1: Trying private key: /home/pupeno/.ssh/id_ecdsa
debug1: Next authentication method: password
pupeno@b1's password:

Answers:


94

事实证明,我的钥匙不在代理中,并且此问题已得到解决:

OS X

ssh-add -K

Linux / Unix

ssh-add -k

您可以使用以下命令列出已加载的密钥:

ssh-add -l

ssh-add -L # for more detail

5
需要注意的是ssh-add -K特定于OS X.
罗杰Lipscombe

每次重启时都需要这样做吗?
Krauser

8
  1. 检查您的./ssh/id_rsa .ssh/id_dsa .ssh/id_ecdsa文件是否具有应由用户拥有的正确权限,并将其更改为600。

  2. 检查pupeno/.ssh/authorized_keysb1 上的公共密钥是否正确,并检查authorized_keys密钥末尾是否有换行符。

  3. 检查您是否正在运行ssh-agent,尝试通过加载密钥 ssh-add

  4. 尝试使用基于GSSAPI的身份验证和转发 ssh -K


密钥的许可是很好的,authorized_keys中的密钥是很好的(否则,我认为我一开始会遇到麻烦)。
pupeno 2012年

您是否正在运行ssh-agent?如果先执行ssh-add然后执行ssh -A pupeno @ b1,然后执行ssh pupeno @ b1,会发生什么情况?
丹尼尔·普拉塔·阿尔梅达

您为什么不更新答案以提及ssh-add -K,我会接受您的而不是我的(因为信息几乎是同时发布的)。
pupeno 2012年

6

由于/ tmp中没有剩余空间,sshd服务器拒绝代理转发请求时遇到问题。这是因为sshd需要在/ tmp中创建套接字。清理磁盘解决了我的问题。

ssh -v当时说:

debug1: Remote: Agent forwarding disabled: mkdtemp() failed: No space left on device

1
我有同样的问题,只有/ tmp上的权限错误。谢谢!!
nevyn

6

另一个可能的原因是连接共享:一个可能已经在另一台主机上登录,而没有启用代理转发和连接共享。ssh -A通过共享连接使用(或在配置文件中等效指定)第二次登录将静默忽略该-A标志。仅在完全注销或禁用连接共享以进行第二次登录后,代理转发才会起作用。


2

为了也引起这个问题的其他Google员工的利益:

〜/ .ssh / config文件中不正确的空格也会导致头部刮擦。

我最近帮了一位有以下工作的同事:

# incorrect
host foobar ForwardAgent yes

代替这个:

# correct
host foobar
  ForwardAgent yes

我还遇到了这样的实例:即使不应该这样做,主机列表下缺少指令缩进也会影响功能。


0

将以下行添加到.ssh / config文件

  Host **Server_Address**
     ForwardAgent yes

将密钥添加到SSH代理

 ssh-add -K

连接到远程服务器

ssh -v **username**@**Server_Address**

针对GitHub运行连接测试

ssh -T git@github.com

针对目标git仓库运行ls远程测试

git ls-remote --heads git@github.com:**account**/**repo**.git
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.