无法通过 SSH 访问 openssh 服务器版本 7.8 及更高版本

无法通过 SSH 访问 openssh 服务器版本 7.8 及更高版本

我无法使用公钥身份验证从终端登录 VPS 上干净的 Centos8 安装。

登录时,它似乎验证正常,但随后超时,然后返回“连接由 [远程主机 IP 地址] 重置”(不是对等方)。

我已经检查了所有日志。但没有什么真正即将到来。

我检查过的事情:

  • /var/日志/消息
  • /var/log/audit/audit.log
  • /var/日志/安全
  • ~/.ssh 和 ~/.ssh/id_rsa* 文件的权限
  • /etc/ssh/sshd_config

我尝试从局域网中的不同机器登录但没有成功:

  • 乌班图18.04
  • CentOS 7机器
  • 世界SL

值得注意的是,我从同一个 VPS 登录到干净的 CentOS7 安装没有任何问题。

OpenSSH 8 中是否有我不知道的更改?

我已附加用于登录 CentOS7 和 CentOS8 系统的详细输出:

正如您所看到的,身份验证在以下两个方面均成功:

debug1: Authentication succeeded (publickey)

我在 CentOS 8 中看到的主要区别是它现在使用 OpenSSH 8 而不是 OpenSSH 7

OpenSSH 8 中是否有我不知道的更改?

预先感谢大家。


编辑1

@thehostingadmin 我不知道如何从 Web GUI 复制粘贴,但这是您提供的命令的输出:https://i.stack.imgur.com/9lJec.jpg

编辑2

# sysctl -w net.ipv4.tcp_tw_recycle=0
sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory

# sysctl -w net.ipv4.tcp_tw_reuse=0
net.ipv4.tcp_tw_reuse = 0

结果:仍然没有骰子

编辑3

成功/失败矩阵

|         OS         |  SSH Client   |   Network    | Auth |  Success   |
|--------------------|---------------|--------------|------|------------|
| Ubuntu 18.04 (WSL) | OpenSSH_7.6p1 | LAN (NAT x2) | OK   | E01 | TO/H |
| Debian 10 (RPi)    | OpenSSH_7.9p1 | LAN (NAT x2) | OK   | TO/H       |
| Ubuntu 18.04       | OpenSSH_7.6p1 | LAN (NAT x1) | OK   | E02        |
| CentOS 7.8         | OpenSSH_7.4p1 | LAN (NAT x1) | OK   | TO/H       |
| CentOS 7.8         | OpenSSH_7.4p1 | VPS          | OK   | OK         |
  • E01:通过[远程主机IP地址]端口22重置连接
  • E02: packet_write_wait: 连接到 [远程主机 IP 地址] 端口 22: 管道损坏
  • TO/H:超时/挂起

编辑4 进行了以下更改:

# /etc/ssh/sshd_config
TCPKeepAlive yes
ClientAliveInterval 20
ClientAliveCountMax 5

没有可测量的差异。

编辑5

当 ssh 客户端抛出错误时E01,我可以在服务器上看到以下内容:

# journalctl -u systemd-logind -fn0
Aug 27 14:51:18 host systemd-logind[701]: New session 136 of user root.
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 1
Aug 27 14:51:38 host systemd-logind[701]: Session 136 logged out. Waiting for processes to exit.
Aug 27 14:51:38 host systemd-logind[701]: Removed session 136.

成功登录如下所示:

Aug 27 15:04:42 host systemd-logind[701]: New session 143 of user root.

编辑6

我转向LogLevelDEBUG3发现以下内容/var/log/secure

# Login Fail
Aug 27 15:59:07 host sshd[9387]: debug3: monitor_read: checking request 124
Aug 27 15:59:26 host sshd[9389]: Read error from remote host <wan ip> port 2611: Connection reset by peer
Aug 27 15:59:26 host sshd[9389]: debug1: do_cleanup

# Login Success
Aug 27 15:57:48 host sshd[9360]: debug3: monitor_read: checking request 124

编辑7

向@fra-san 道歉。添加更详细的日志记录 ( -vvv) 确实提供了更多详细信息

# SSH fail
debug2: channel 0: request shell confirm 1
debug3: send packet: type 98
debug2: channel_input_open_confirmation: channel 0: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug3: send packet: type 1
Connection reset by <remote host ip> port 22

# SSH Success
debug2: channel 0: request shell confirm 1
debug3: send packet: type 98
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Activate the web console with: systemctl enable --now cockpit.socket

编辑8

将我的家庭路由器(自定义固件)更换为 ISP 提供的路由器。还是没有喜悦。

编辑9

涉足wireshark数据包跟踪。

注意:向我的托管提供商(适用于他们)提出问题后,服务器上的 OpenSSH 服务器已切换到 OpenSSH 7.8 - 但问题仍然存在。

编辑10

线鲨。客户端与服务器:https://i.stack.imgur.com/XRZRW.jpg

笔记

  • 客户端未收到来自服务器的帧 29
  • 托管提供商改openssh回 v8

答案1

如果不启用 DEBUG 日志记录,然后在 VPS 上使用 journalctl 跟踪 sshd,则无法知道。

为此,您需要询问您的 VPS 提供商如何通过控制台访问服务器。不同的提供商有不同的方法。

/etc/ssh/sshd_config在VPS上的任意位置添加以下配置:

LogLevel DEBUG

重新启动 VPS 上的 sshd:

sudo systemctl restart sshd

跟踪 VPS 上的 sshd 日志:

journalctl -u sshd -fn0

现在尝试从本地计算机进行 ssh,以便您可以看到 sshd 所说的错误。

编辑:根据评论结果更新:

考虑到您在从 NATd 主机连接时遇到困难,请检查您的 Cent 8 VPS 上是否启用了以下内核配置,如果是,请禁用它们:

sysctl -w net.ipv4.tcp_tw_recycle=0

sysctl -w net.ipv4.tcp_tw_reuse=0

如果这有效,请使用/etc/sysctl.conf通过重新启动来保留这些更改。

答案2

我有一些好消息。

我向我的 ISP 提出了问题。他们给了我一个新的IP。我不知道他们还做了什么,但它已经解决了问题。

我还向从事openssh.

他们表示这是一个已知问题,尤其是在 VMWare 社区中:

https://communities.vmware.com/thread/590825

该问题与 OpenSSH_7.8 中与该标志相关的更改有关QoS

http://www.openssh.com/txt/release-7.8

解决方法~/.ssh/config是在你的文件中使用以下内容

Host *
    IPQoS=throughput

在我确认它对我来说有效之前,我不会将其标记为答案。

答案3

这对我来说很重要:

restorecon -Rv ~/.ssh 

从这里:https://wiki.centos.org/HowTos/Network/SecuringSSH

相关内容