设置远程 ssh 时出现问题

设置远程 ssh 时出现问题

我家里有一台 ubuntu 台式机和一台 mac 笔记本电脑。我正在尝试设置它,以便我可以从本地网络之外通过 ssh 进入我的 ubuntu 机器。

以下是我目前所做的工作:

(1) 我已在 ubuntu 机器上的端口 22 上启用了 ssh。文件 /etc/ssh/sshd_config 显示它正在监听端口 22。

(2)如果我查看防火墙状态(ufw status),它会显示:

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere                  
22 (v6)                    ALLOW       Anywhere (v6)             

(3) 在我的 Netgear C3700-100NAS 路由器上,我将 IP 地址保留给我的 ubuntu 机器,这样它就不会改变。

(4)我设置了端口转发,服务类型为TCP/UDP,外部和内部端口设置为22,并指向我的内部IP地址。

(5)我使用以下方法找到了我的公共 IP 地址http://www.myipaddress.com/

我可以使用本地 IP 地址从家里的本地网络成功通过 ssh 进入我的 ubuntu 机器。

但远程 ssh 超时。我还尝试了在线端口转发测试器(https://www.yougetsignal.com/tools/open-ports/),当我将它指向我的公共 IP 地址和端口 22 时,它会告诉我该端口已关闭。

当我尝试远程 ssh 时,出现以下信息:

~ $ ssh -vvv [email protected]
OpenSSH_7.4p1, LibreSSL 2.5.0
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: resolving "xx.xxx.xxx.xx" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to xx.xxx.xxx.xx [xx.xxx.xxx.xx] port 22.
debug1: connect to address xx.xxx.xxx.xx port 22: Operation timed out
ssh: connect to host xx.xxx.xxx.xx port 22: Operation timed out

更新

根据下面列出的一些建议,我做了一些更改。我更改了端口转发,现在使用端口 8022 作为外部端口,但仍然使用端口 22 作为内部端口。我还在路由器设置中打开了一个选项,使其响应 ping。

现在,如果我 ping 我的公共 IP,它确实会响应。但是,如果我通过上面列出的 yougetsignal 网站测试端口 8022 是否打开,它仍然显示端口已关闭。

如果我尝试 SSH:

> ssh -vvv [email protected] -p 8022
OpenSSH_7.4p1, LibreSSL 2.5.0
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: resolving "xx.xxx.xxx.xx" port 8022
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to xx.xxx.xxx.xx [xx.xxx.xxx.xx] port 8022.
debug1: connect to address xx.xxx.xxx.xx port 8022: Operation timed out
ssh: connect to host xx.xxx.xxx.xx port 8022: Operation timed out

我还打电话给了我的 ISP,尽管这是一次令人困惑的对话,但他们似乎并没有阻止我试图使用的端口......

根据下面的建议,我运行了sudo nmap --packet-trace --traceroute --reason xx.xxx.xxx.xx。以下是输出的一部分。端口 8022 没有列出,但我想应该是:

Host is up, received reset ttl 253 (0.0028s latency).
Not shown: 996 filtered ports
Reason: 996 no-responses
PORT     STATE  SERVICE      REASON
135/tcp  closed msrpc        reset ttl 253
139/tcp  closed netbios-ssn  reset ttl 253
445/tcp  closed microsoft-ds reset ttl 253
1025/tcp closed NFS-or-IIS   reset ttl 253

我不确定问题出在哪里... ubuntu 机器?路由器?有什么办法可以解决这个问题吗?

谢谢!

答案1

几天前我也遇到过类似的问题。您的调制解调器或路由器可能未配置为桥接器。这取决于 ISP。在正常模式下,它会阻止所有传入连接,但将其切换到桥接模式会允许所有访问。我不得不打电话给我的 ISP 来更改这一点,这样我就有了公共 IP 地址(虽然很长时间没有完全固定,但对我来说已经足够了),我的路由器现在可以作为所有连接的桥梁。

这是因为 ISP 缺少 IP 地址,除了一些其他路由之外隐藏了用户。您需要真正拥有公共 IP 地址。

答案2

(3) 在我的 Netgear C3700-100NAS 路由器上,我将 IP 地址保留给我的 ubuntu 机器,这样它就不会改变。

(4)我设置了端口转发,服务类型为TCP/UDP,外部和内部端口设置为22,并指向我的内部IP地址。

根据您的描述,您的路由器似乎没有监听端口 22。

我会测试一些东西

  1. 是否可以 ping 通您的公共 IP 地址?如果不行,您可以在路由器上激活 ping/ICMP 监听吗?
  2. 测试它是否有效,当您在路由器上监听端口 8022 并将其转发到端口 22 时。在 Linux 上,非特权用户不得使用端口 1 到 1024,因此可能类似。
  3. 我会进一步测试它是否适用于端口 80 或 8080 和 http。也许路由器出于某种原因不允许 SSH。

答案3

我会首先查看问题是否出在您的 ISP 的某些网络设备上,然后是您的路由器,然后是 PC 上。

您能否再试一次,将端口从 8022 移至 443?

有时某些 ISP 的端口过滤非常严格。但 443 端口通常不被过滤。此外,高于 10000 的端口可能更有机会,但我从您的 nmap 中看到您可以到达 445 左右:您是否从本地网络外部执行了 nmap?最好的证明是,您是否可以从家庭网络外部向您的公共 IP 启动 nmap。

Kr,
思科

答案4

我建议检查路由器上的 NAT 表。NAT 表应使路由器能够监听该端口上的任何请求,并将请求转发到目标机器上的指定端口(如果需要,它们可以是同一个端口)。1024 到 49151 之间的端口可供用户使用。如果使用非标准端口,请在 ssh 命令上使用 -p 标志。

相关内容