我有两台机器,Windows 11 作为主机运行,Windows 7 作为客户机运行。
两者都安装了不同版本的 openssh,ssh 服务器在客户机上运行,ssh 客户端在主机上运行。
问题是,尽管日志显示已连接,但服务器没有响应客户端:
$ ssh -vvv -i .ssh/id_rsa [email protected]
OpenSSH_9.9p1, OpenSSL 3.4.0 22 Oct 2024
debug1: Reading configuration data /home/ahmad/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: resolve_canonicalize: hostname 127.0.0.1 is address
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/ahmad/.ssh/known_hosts'
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/ahmad/.ssh/known_hosts2'
debug3: channel_clear_timeouts: clearing
debug3: ssh_connect_direct: entering
debug1: Connecting to 127.0.0.1 [127.0.0.1] port 22.
debug3: set_sock_tos: set socket 4 IP_TOS 0x48
debug1: Connection established.
debug1: identity file .ssh/id_rsa type 0
debug1: identity file .ssh/id_rsa-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_9.9
kex_exchange_identification: read: Software caused connection abort
banner exchange: Connection to 127.0.0.1 port 22: Software caused connection abort
首先,我认为我错误配置了虚拟机中的端口转发设置,因为服务器很可能一开始就没有收到任何数据包,所以我只是假设数据包只由执行转发工作的虚拟机程序接收,然后我尝试通过关闭 sshd 并nc
从端口 22 上的 msys2openbsd-netcat
包中公开来确保我正确设置了它,并且它正常工作,客户端可以连接并与服务器交换数据:
我认为上面的截图也排除了防火墙问题的可能性。
好的,也许 openssh 服务器只监听环回接口,当我用它检查时netstat
,输出显示它监听所有接口(我也试图在sshd_config
文件中明确确保这一点):
为了防止 ssh 服务器无法正常工作,我尝试通过环回接口进行本地连接,并且没有任何问题:
我排除了“openssh 版本不同”的可能性,因为客户机上的 nc 程序可以接收服务器的响应,而主机上却不能(所以我认为在这种情况下版本并不重要):
那么,实际问题是什么?谁是罪魁祸首?我肯定忽略了一些重要的事情,请给我指出正确的方向,提前谢谢。
编辑:我也尝试过重新启动(分别重新启动客户机和主机),但没有任何改变。
编辑 2:使用其他 IP 而不是环回进行测试,它也可以工作,但是主机仍然无法接收响应:
编辑 3:此时,我很困惑,不知道谁才是阻止我使用 ssh 连接的罪魁祸首,是 openssh 本身吗?但它在本地客户机上运行良好,那么这是 virtualbox 的问题吗?但令人惊讶的是,ncat 建议我不要责怪 virtualbox,因为它在同一个端口上运行良好。
非常感谢grawity的评论,它让我对多次反复试验失败的绝望有所了解(请不要将其与托马斯·爱迪生先生进行比较)。
在查看了来自的入站规则后
wf.msc
,我注意到 sshd 不在那里。我只希望如果我添加与 sshd 相关的新规则,情况会有所改变,事实确实如此!连接不再被阻止 \o/步骤:
Win+r
并输入wf.msc
,单击入站规则,操作->新规则->选择程序并从usr\bin
msys2 的安装目录中选择 sshd.exe。->允许连接->将规则应用于符合您偏好的任何内容->给出规则的名称->完成。看来 Windows 7 对
sshd
程序不太友好,会根据可执行文件而不是基于端口立即阻止它,我不知道为什么 Windows 7 会这样做,它没有给出任何迹象、提示或任何其他东西来通知用户发生了什么,至少根据我使用 Windows 11 的经验,默认情况下sshd
程序不会被阻止。希望它能帮助其他遇到类似问题的人。