我最近在一台旧的 Dell Optiplex 上设置了一个 ubuntu 服务器。在同一网络上时,我可以通过 ssh 远程登录。但是,当我尝试使用公共 IP 从其他网络 ssh 登录时,出现以下错误:
kex_exchange_identification: Connection closed by remote host
我在这个论坛以及许多其他论坛上搜索过这个错误,并尝试了许多不同的方法来修复这个错误,但到目前为止都没有奏效。我已将端口转发到服务器的静态 IP,我已允许 OpenSSH 并通过 UFW 在我的服务器上打开端口 22,并且我已设置将我的计算机连接到我的网络的 VPN。到目前为止,这些都没有奏效。
我做错了什么?如果有人有其他我可以尝试的想法,或者任何我应该再三检查的东西,那就太好了。非常感谢。
答案1
我办公桌上的一台小型计算机也遇到过类似的情况。我调试该问题的方法就是运行 sshd -t,它会在调试模式下运行 sshd 守护进程。此命令报告我的密钥的权限无效。我所要做的就是进入存储密钥的文件夹并发出 chmod 0600 <your_ssh_keys>。也许你运行的操作也生成了具有错误权限的内容
答案2
抱歉,我必须提交答案,因为我的声誉还不够,所以我还无法发表评论。
似乎我们需要做更多的调试才能正确回答这个问题,但是您提到了 UFW,所以我想知道这是否真的配置错误。
/etc/hosts.allow
您的和配置也有可能/etc/hosts.deny
配置错误。
此外,您使用的是密码身份验证还是公钥身份验证?我问这个问题的原因是,即使您使用密码身份验证,ssh 客户端仍会在连接阶段发送您的主机 ID 密钥,ssh 服务器可能会将其视为身份验证失败(在某些配置中),这意味着您将无法输入密码。可以使用以下命令修复此问题:
ssh -o PubkeyAuthentication=No -o PreferredAuthentications=Password <username>@<your server IP>
如果您可以提交以下输出:
UFW 具有:
sudo ufw status
仔细检查文件中的条目/etc/hosts.*
。
尝试进行身份验证时,还可以通过添加标志来提交输出调试输出-v
,例如:
ssh -v -i <ssh_privkey> <username>@<your server IP>
希望我们能够彻底查明此事。