Centos

無法通過 SSH 連接到 openssh 伺服器版本 7.8 及更高版本

  • November 3, 2020

我無法使用公鑰身份驗證從終端登錄到我的 VPS 上安裝的干淨 Centos8。

登錄時,它似乎驗證通過,但隨後超時然後返回“連接重置

$$ remote host ip address $$"(不是同行)。 我檢查了所有的日誌。但沒有什麼是真正即將到來的。

我檢查過的事情:

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

我嘗試從區域網路中的不同機器登錄但沒有成功:

  • Ubuntu 18.04
  • CentOS 7 機器
  • WSL

值得注意的是,我從同一個 VPS 登錄到干淨的 CentOS7 安裝沒有問題。

OpenSSH 8 中是否有我不知道的變化?

我附上了登錄 CentOS7 和 CentOS8 系統的詳細輸出:

如您所見,兩者的身份驗證均成功:

debug1: Authentication succeeded (publickey)

我在 CentOS 8 中看到的主要區別是它現在使用的是 OpenSSH 8 而不是 OpenSSH 7

OpenSSH 8 中是否有我不知道的變化?

提前謝謝大家。


編輯 1

@thehostingadmin 我不知道如何從 Web GUI 複製 n 粘貼,但這是您提供的命令的輸出:https ://imgur.com/9WQJGuN

編輯 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: 連接重置$$ remote host ip address $$埠 22
  • E02:packet_write_wait:連接到$$ remote host ip address $$埠 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 keepalive@openssh.com 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

我轉身發現以下LogLevel內容DEBUG3``/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 伺服器已切換到 O​​penSSH 7.8 - 但問題仍然存在。

編輯 10

線鯊。客戶端與伺服器:https ://imgur.com/fIVbEqq

筆記

  • 客戶端未收到來自伺服器的第 29 幀
  • 託管服務提供商改openssh回 v8

我有一些好消息。

我向我的 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

在我確認它最終能正常工作之前,我不會將此標記為答案。

如果不啟用 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來通過重新啟動保留這些更改。

引用自:https://unix.stackexchange.com/questions/606379