我可以使用加载到 ssh-agent 中的密钥从hostA
到hostB
和从 到hostA
进行sshhostC
操作,没有任何问题。但是,如果我ssh -A hostB
从执行hostA
,然后尝试ssh hostC
从hostB
,公钥身份验证不起作用,它会要求我输入密码。
一些细节:
- 我正在使用
ssh-agent
OpenSSH 自带的程序,而不是 GNOME Keyring 或类似的东西。 ssh -v hostB
来自hostA
和ssh -v hostC
来自均hostA
显示:debug1: Next authentication method: publickey debug1: Offering RSA public key: /home/rhansen/.ssh/id_rsa debug1: Server accepts key: pkalg ssh-rsa blen 279 debug1: Authentication succeeded (publickey).
ssh-add -L
当我运行时,我看到了我的钥匙hostB
。- 我的密钥
hostA
受到密码保护。 - 开启
hostB
,/etc/ssh/sshd_config
不包含AllowAgentForwarding no
。 - 所有三个系统均运行带有 OpenSSH 6.6.1p1 的 Ubuntu 15.10(Wily)。
当我
ssh -vvv hostC
从运行时hostB
,记录以下内容:... debug2: key: /home/rhansen/.ssh/id_rsa ((nil)), debug2: key: /home/rhansen/.ssh/id_dsa ((nil)), debug2: key: /home/rhansen/.ssh/id_ecdsa ((nil)), debug2: key: /home/rhansen/.ssh/id_ed25519 ((nil)), debug1: Authentications that can continue: publickey,password debug3: start over, passed a different list publickey,password debug3: preferred gssapi-keyex,gssapi-with-mic,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/rhansen/.ssh/id_rsa debug3: no such identity: /home/rhansen/.ssh/id_rsa: No such file or directory debug1: Trying private key: /home/rhansen/.ssh/id_dsa debug3: no such identity: /home/rhansen/.ssh/id_dsa: No such file or directory debug1: Trying private key: /home/rhansen/.ssh/id_ecdsa debug3: no such identity: /home/rhansen/.ssh/id_ecdsa: No such file or directory debug1: Trying private key: /home/rhansen/.ssh/id_ed25519 debug3: no such identity: /home/rhansen/.ssh/id_ed25519: No such file or directory debug2: we did not send a packet, disable method debug3: authmethod_lookup password debug3: remaining preferred: ,password debug3: authmethod_is_enabled password debug1: Next authentication method: password
如果我
ssh -vvv hostB
从执行hostA
,然后执行,则在密码提示之前ssh hostC
会记录以下内容:hostA
hostC
debug1: client_input_channel_open: ctype [email protected] rchan 2 win 65536 max 16384 debug2: fd 10 setting O_NONBLOCK debug3: fd 10 is O_NONBLOCK debug1: channel 2: new [authentication agent connection] debug1: confirm [email protected]
我的
~/.ssh/config
所有系统都包含以下不常见的设置(以及一些我认为不相关的常见设置):ControlMaster auto ProxyCommand sh ~/.ssh/proxy.sh '%h' '%p' '%r' IdentitiesOnly yes
有任何想法吗?
答案1
事实证明,罪魁祸首是我的以下一行~/.ssh/config
:
IdentitiesOnly yes
不久前,我在试验大量导致“尝试次数过多”被拒绝的密钥时添加了该功能。试验结束后,我忘记了它,因此从未将其删除。(在我开始使用代理转发之前,它从未引起任何问题。)
答案2
我很高兴看到你能自行解决这个问题。
您的问题与我遇到的问题不同,但我会添加我遇到的问题,以防有人碰到与我遇到的问题相同的帖子。
就我的情况而言,问题在于我的主目录的权限为 775,而 ssh 不允许这样做。不仅 .ssh/ 目录需要为 700,authorized_keys 需要为 600,而且主目录本身也必须为 755 或更低(例如 700)。