我无法使用公共 IP 通过 SSH 访问我的计算机。我做错了什么?

我无法使用公共 IP 通过 SSH 访问我的计算机。我做错了什么?

我正在尝试使用我的公共 IP 地址从外部源通过 ssh 进入我的计算机。但一直收到错误消息ssh: connect to host <public_ip> port 2222: Connection refused

失败之处

  1. 如果我尝试从外部 IP 通过 ssh 进入本地计算机,则ssh -p 2222 <user_name>@<public_ip>此命令将挂起。

  2. 如果我尝试从我的计算机本身通过 ssh 进入我的计算机, ssh -p 2222 <user_name>@<public_ip>那么我会收到错误消息ssh: connect to host <public_ip> port 2222: Connection refused

什么有效

  1. 我可以从我的电脑进入我自己的电脑ssh -p 2222 <user_name>@<internal_ip>

  2. 我可以通过同一网络内的 Mac 访问自己的电脑ssh -p 2222 <user_name>@<internal_ip>

  3. 我可以从我的网络外部的计算机 ping 我的公共 IP 地址。

以下是我所做的:

  1. 我已经登录 routerlogin.net 上的 netgear genie,并将端口转发到指向我计算机的内部 IP 地址的端口 2222。

  2. systemctl status sshd返回

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-10-23 14:44:09 PDT; 19min ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 305357 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 305359 (sshd)
      Tasks: 1 (limit: 38023)
     Memory: 1.7M
        CPU: 23ms
     CGroup: /system.slice/ssh.service
             └─305359 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Oct 23 14:44:09 lenovo systemd[1]: Starting OpenBSD Secure Shell server...
Oct 23 14:44:09 lenovo sshd[305359]: Server listening on 0.0.0.0 port 2222.
Oct 23 14:44:09 lenovo sshd[305359]: Server listening on 0.0.0.0 port 22.
Oct 23 14:44:09 lenovo systemd[1]: Started OpenBSD Secure Shell server.

所以我的电脑正在监听端口 2222

  1. systemctl status ufw
● ufw.service - Uncomplicated firewall
     Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sun 2023-10-22 20:48:44 PDT; 18h ago
       Docs: man:ufw(8)
    Process: 725 ExecStart=/lib/ufw/ufw-init start quiet (code=exited, status=0/SUCCESS)
   Main PID: 725 (code=exited, status=0/SUCCESS)
        CPU: 36ms

Oct 22 20:48:43 lenovo systemd[1]: Starting Uncomplicated firewall...
Oct 22 20:48:44 lenovo systemd[1]: Finished Uncomplicated firewall.
  1. 我已经跑了sudo ufw allow 2222/tcpufw stats回来了
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22                         ALLOW       Anywhere
8080/tcp                   ALLOW       Anywhere
2222/tcp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
22 (v6)                    ALLOW       Anywhere (v6)
8080/tcp (v6)              ALLOW       Anywhere (v6)
2222/tcp (v6)              ALLOW       Anywhere (v6)
  1. 我已经添加Port 2222/etc/ssh/sshd_config

  2. nmap -O -v <your public_IP>返回以下内容

PORT     STATE    SERVICE
22/tcp   filtered ssh
23/tcp   filtered telnet
80/tcp   filtered http
111/tcp  filtered rpcbind
443/tcp  filtered https
2222/tcp filtered EtherNetIP-1
8080/tcp filtered http-proxy
8181/tcp filtered intermapper
9000/tcp filtered cslistener

我还遗漏了什么?

解决方案

所以我找到了问题所在。我的网络有双重 NAT,需要在路由器和调制解调器上设置端口转发。在我的调制解调器上,我必须将端口转发到路由器,在路由器上,我必须将端口转发到设备。我设置了这些并重新启动了调制解调器,现在我可以从外部 IP 地址 ssh 进入我的设备。我认为另一件让我感到困惑的事情是,我没有静态内部 IP 地址,所以我需要将路由器的端口转发更改为我的设备,因为在某些调制解调器重新启动期间,我的内部 IP 地址发生了变化。

答案1

从收到连接被拒绝错误的终端运行

nmap -O -v <your public_IP>

这将告诉您哪些端口已打开并正在响应。结果应该会告诉您如何继续解决问题。如果端口 22 和 2222 响应,请查看 openssh 服务器上的 ssh 配置文件。您还应该考虑专注于让端口 22 正常工作,并暂时放弃转发到端口 2222 的步骤。

在配置文件中/etc/ssh/sshd_config.d/sshd_config.conf,设置loglevel INFO,然后tail -f /var/log/syslog在服务器上的 shell 中查看是否记录了有关登录尝试的任何信息。请注意(这可能是您的问题),您需要在此配置文件中为端口 2222 创建类似的条目。请注意,ListenAddress 需要通过 NAT 或分配的公共 IP 地址从 Internet 访问(出于您的目的)。

为了进行故障排除,请考虑设置ListenAddress 0.0.0.0

使用 AllowUsers 和 DenyUsers 是一项值得利用的出色安全功能。此功能和您正在执行的端口转发将真正减少被黑客入侵的机会。

样本:

Port 22
          ListenAddress 192.168.1.1
          HostKey /etc/ssh/ssh_host_key
          ServerKeyBits 1024
          LoginGraceTime 600
          KeyRegenerationInterval 3600
          PermitRootLogin no
          IgnoreRhosts yes
          IgnoreUserKnownHosts yes
          StrictModes yes
          X11Forwarding no
          PrintMotd yes
          SyslogFacility AUTH
          LogLevel INFO
          RhostsAuthentication no
          RhostsRSAAuthentication no
          RSAAuthentication yes
          PasswordAuthentication yes
          PermitEmptyPasswords no
          AllowUsers your_username

根据您的症状,我怀疑您是否能走到这一步,但请检查/清除$HOME/.ssh/known_hosts您用于 ssh 进入服务器的客户端,看看是否正在交换密钥。同样,我会修改 openssh 服务器和路由器,使其仅使用端口 22 进行 ssh。一旦您使其正常工作,您就可以使用其他端口来增加额外的安全性。您还应该禁用 telnet/ftp,只允许sshsftp以获得更好的安全性。

答案2

所以我找到了问题所在。我的网络有双重 NAT,需要在路由器和调制解调器上设置端口转发。在我的调制解调器上,我必须将端口转发到路由器,在路由器上,我必须将端口转发到我的设备。我设置了这一点并重新启动了调制解调器,现在我能够从外部 IP 地址 ssh 进入我的设备。我认为另一件让我感到困惑的事情是,我没有静态内部 IP 地址,所以我需要将路由器的端口转发更改为我的设备,因为在某些调制解调器重新启动期间,我的内部 IP 地址发生了变化

相关内容