我观察到有关使用转发密钥的一些奇怪的行为。
我通过 SSH 访问我的路由器(OpenWRT 22.03)并启用密钥转发:
ssh -A [email protected] -p 2222
代理连接套接字已成功创建并具有适当的权限:
root@gw-bsb:~/.ssh# env | grep SSH
SSH_AUTH_SOCK=/tmp/dropbear-19ec2148/auth-cea63dfa-6
SSH_TTY=/dev/pts/0
root@gw-bsb:~# ls -l /tmp/dropbear-19ec2148/auth-cea63dfa-6
srwxr-xr-x 1 root root 0 Jan 8 00:55 /tmp/dropbear-19ec2148/auth-cea63dfa-6
密钥对于 ssh 客户端也是可见的:
root@gw-bsb:~/.ssh# ssh-add -v -l
1024 SHA256:xx yy (RSA)
256 SHA256:zz yy (ED25519)
2048 SHA256:xxx iii (RSA)
但是客户端无法在真正的 ssh 连接中使用密钥:
$ ssh -v [email protected]
debug1: rekey in after 134217728 blocks
debug1: get_agent_identities: ssh_fetch_identitylist: agent refused operation
OpenWRT 使用 dropbear 实现 ssh 客户端:
root@gw-bsb:~/.ssh# dropbear -V
Dropbear v2022.82
旧版本的OpenWRT没有密钥转发问题。
我怎样才能解决这个问题?
答案1
问题在于 ssh 客户端/服务器的混合实现。OpenWRT 使用了滴熊为传入的 sshd 连接提供服务,但使用 OpenSSH ssh 客户端从会话建立进一步的连接。对于某些不兼容性,ssh 代理能够列出密钥,但是远程控制客户无法做到这一点。
修复方法是删除 OpenSSH ssh 客户端,然后将 shell 恢复为使用 dropbear 实现的远程控制客户。
修复之前:
root@gw:~# ssh -V
OpenSSH_8.9p1, OpenSSL 1.1.1q 5 Jul 2022
因此,这不是滴熊客户。
安装了两个客户端 ssh 包:
root@gw:~# opkg list-installed | grep drop
dropbear - 2022.82-2
root@gw:~# opkg list-installed | grep ssh
openssh-client - 8.9p1-1
openssh-client-utils - 8.9p1-1
openssh-keygen - 8.9p1-1
openssh-sftp-server - 8.9p1-1
openssh-client
删除包后:
root@gw:~/router-script# ssh -V
Dropbear v2022.82
是的,它成功了!
root@gw:~# ssh [email protected]
Hi 0anton! You've successfully authenticated, but GitHub does not provide shell access.
感谢伟大的 Dropbear ssh 包的作者 Matt,他帮助我快速找到了解决方案。