我一直在尝试使用 ssh 连接到我家里的机器。
但每次我在不在本地的情况下尝试连接它时,总是会导致“连接超时”
我无法 ping 通它,我也尝试使用 netcat 和特定端口。没有响应。也许我错过了什么。
这是我家里的linux机器的情况:
- 我使用私钥/公钥进行身份验证,并且已将公钥复制到我的 Linux 机器上
- 我家里的linux环境是Ubuntu 22.0.4.1 LTS
- 我已禁用密码验证
- 如果我在本地网络上,它总是可以工作,只是不能远程工作
- 我的 ISP 没有分配静态 IP,但每次我尝试连接时,我总是检查 ISP 提供给我的网络的当前 IP。
- 我已经为我的 Linux 机器设置了不同的端口 [x]
我尝试修复此问题的方法如下:
设置我的 sshd_config 以在我的 Linux 机器上保持活动状态
在我的路由器上创建一个端口转发规则,从特定端口 [y] 到我的 Linux 机器上设置的端口 [x],并且对于 IP 地址,我已将其设置为我的 Linux 机器本地对应的 IP 地址。我将 UDP 和 TCP 设置为允许
由于我使用的是 ubuntu,因此我使用 ufw 设置规则以允许防火墙的端口 [x]
检查我的 ssh 是否正在运行,每次检查时它都显示“处于活动状态”
这是我使用的 ssh 命令
ssh -i [.../mykey] [username]@[wan ip] -p [y]
我尝试使用 VPN 隧道连接到我的家并像在本地一样工作。它有效,但它与我的所有设备都不兼容。因此,我正在寻找一种不使用 VPN 即可使用 ssh 进行连接的方法。
笔记:
- 当使用我的公共 IP 时它不起作用,目前我使用公共 IP 进行测试的方式是将我的笔记本电脑连接到我的手机网络。
- 我的笔记本电脑的公钥已在主机的 authorized_keys 中注册
- 我使用以下方法检索了我的公共 IP
curl ifconfig.me
- 我最初是在 stackoverflow 上问这个问题的,但过了一段时间后,我觉得 ubuntu 的 stack exchange 更合适,所以我把它移到了这里。
答案1
我已修复此问题。原来我的 ISP 使用 CGNAT 作为其网络,这对我来说有点“隐藏”,因为 ISP 使用唯一端口映射到我的 IP 地址。因此,如果不知道 ISP 分配的唯一端口,我就无法真正连接到我的网络。
为了解决这个问题,我关闭了 CGNAT 选项,幸好我的 ISP 为我提供了关闭该选项的选项。
希望这个答案能够帮助将来遇到此问题的任何人。