我正在尝试启动自己的 Web 服务器。我已安装了一份全新的 ubuntu 服务器和 openSSH。
我可以使用内部 IP(192.168.1.12)顺利通过 SSH 进入服务器,但无法通过外部 IP 地址访问它。我已经设置了端口转发,但仍然收到来自 putty 的“连接被拒绝”提示。
我注意到的一件事是,如果我登录到我的网络服务器并输入,sudo /usr/sbin/sshd -d
我会收到以下错误:
debug1: Bind to port 22 pm 0.0.0.0
Bind to port 22 on 0.0.0.0 failed: Address already in use.
debug1: Bind to port 22 on ::.
Bind to port 22 on :: failed: Address already in use.
我猜这就是我尝试使用外部地址进行 ssh 时出现问题的原因?我尝试禁用 ipv6,但这样做只能修复一个错误
编辑:
netstat -tan | grep LIST
给出以下结果
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
netstat -tulpn
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 620/sshd
tcp6 0 0 :::22 :::* LISTEN 620/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 604/dhclient3
答案1
sshd 已在运行,netstat 可证明这一点。它还绑定到所有 IP(netstat 中的 0.0.0.0),因此应该没有问题。
您的路由器上有防火墙吗?您可能启用了端口转发,但防火墙可能仍在丢弃 22。您的 ISP 也可能在 22 到达您之前就阻止了它。我还会执行 iptables -F(丢弃所有 iptables 规则)以确保万无一失;它们会在重启时恢复(或者您可以使用 iptables-restore 恢复它们)。
您可以通过检查被拒绝的连接来确认 sshd 没有拒绝连接/var/log/auth.log
。
如果您确认日志中没有被拒绝的连接,并且路由器上没有防火墙,那么我建议将 SSH 更改为使用 22 以外的端口(随机高端口 > 1024)。您可以通过编辑/etc/ssh/ssh_config
并将“端口 22”更改为更高的端口来实现这一点。
编辑:从评论中更新以保存阅读;在这种情况下,您还应该尝试从网络外部的 IP 进行检查。在这种情况下,ISP 阻止了端口 22,并且内部连接到高端口(指定外部 IP)不起作用,可能是由于缺少发夹 NAT。
答案2
地址已在使用中通常意味着某些服务已在相关端口(即 22)上运行?您是否检查过监听服务?您可以转储吗?
netstat -tan | grep LIST