當我們從新版 Linux(如 Ubuntu 22.04 / 24.04)連線到 CentOS 6 時,常會因為 OpenSSH 過舊而發生連線錯誤,例如:
no matching host key type foundno matching cipher foundUnable to negotiate with x.x.x.x: no matching key exchange method- 甚至完全無法 SSH 連線
造成原因很簡單:
👉 CentOS 6 的 OpenSSH 版本嚴重過時(OpenSSH_5.x),只支援舊算法。
這篇文章分成三個部分,協助你安全、有效率地處理 CentOS 6 連線問題:
🟦 1. 如何確認 CentOS 6 支援哪些 Cipher / KEX / HostKey
即使 SSH 連不上,你仍可以在本地查詢目標主機支援的協定:
方法一:使用 ssh -vvv 顯示完整交涉資訊(最簡單)
ssh -vvv user@centos6-ip
重點段落:
kex: server->client cipher: ...kex: server->client mac: ...offer: ssh-rsa,ssh-dssSupported KEX algorithms: …
這裡就可以看到 CentOS 6 提供的:
- Host Key:
ssh-rsa/ssh-dss - Cipher:
aes128-cbc,3des-cbc - Kex:
diffie-hellman-group1-sha1
方法二:直接查詢 SSHD 設定檔
登入 CentOS 6 後:
cat /etc/ssh/sshd_config
常見舊參數:
Protocol 2
Ciphers aes128-cbc,3des-cbc,aes256-cbc
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
KexAlgorithms diffie-hellman-group1-sha1
你會發現所有演算法都是 CBC、Group1、DSA — 都是現代 Linux 已停用的。
方法三:手動測試遠端 cipher(進階)
ssh -oCiphers=none user@centos6-ip
SSH 會告訴你:
no matching cipher found. Their offer: aes128-cbc,aes256-cbc,3des-cbc
讓你直接知道對方只有這些舊的 CBC cipher。
🟦 2. 提供最安全可行的「兼容參數」讓新版 Ubuntu 能連上 CentOS 6
以下是最安全、最常見的兼容組合(依序逐步放寬)。
✔️ 最低限度(只允許舊 RSA)
ssh \
-oHostKeyAlgorithms=+ssh-rsa \
-oPubkeyAcceptedAlgorithms=+ssh-rsa \
user@ip
✔️ 若還是出錯,加上舊 KEX (Group1)
ssh \
-oHostKeyAlgorithms=+ssh-rsa \
-oPubkeyAcceptedAlgorithms=+ssh-rsa \
-oKexAlgorithms=+diffie-hellman-group1-sha1 \
user@ip
✔️ 再不行,加上 CBC Cipher(CentOS 6 最常用)
ssh \
-oHostKeyAlgorithms=+ssh-rsa \
-oPubkeyAcceptedAlgorithms=+ssh-rsa \
-oKexAlgorithms=+diffie-hellman-group1-sha1 \
-oCiphers=+aes128-cbc \
user@ip
aes128-cbc 是最輕量且較不危險的 CBC。
✔️ 必要時(極舊 DSA)
ssh \
-oHostKeyAlgorithms=+ssh-dss \
-oPubkeyAcceptedAlgorithms=+ssh-dss \
user@ip
⚠️ 這是最後手段,因為 ssh-dss 完全不安全。
🟦 3. 如何在不破壞 CentOS 6 的前提下安全升級 OpenSSH(強烈建議)
CentOS 6 的 OpenSSH 太舊,不支援現代算法,因此最佳解是 升級 OpenSSH(不影響既有 SSH 服務)。
方法如下:
✔️ 方式 A:並存新版 OpenSSH(不覆蓋系統版本)—最安全
- 安裝 EPEL + 編譯工具:
yum groupinstall "Development Tools"
yum install pam-devel zlib-devel openssl-devel
- 下載最新 OpenSSH:
wget https://openbsd.mirror…/openssh-9.x.tar.gz
tar -xvf openssh-9.x.tar.gz
cd openssh-9.x
- 指定安裝到新路徑,避免覆蓋系統:
./configure --prefix=/opt/openssh9 --sysconfdir=/opt/openssh9/etc
make
make install
- 啟動新版 SSHD(使用不同 port,例如 2222):
編輯:
/opt/openssh9/etc/sshd_config
加入:
Port 2222
UsePAM yes
PasswordAuthentication yes
啟動:
/opt/openssh9/sbin/sshd
- 測試成功後再決定是否切換取代舊版
✔️ 方式 B:使用第三方 Repository(風險較高)
例如 SirLawrence repo,但可能引入不相容 module,因此較不推薦。
✔️ 方式 C:封裝為 RPM(最乾淨,但較複雜)
將新版 OpenSSH 重新打包成可安裝 RPM。
🟦 最後建議
- ❗ CentOS 6 已 EOL,安全風險極高。
- ✔️ 若能升級 OS,是最佳解。
- ✔️ 若不能升級,至少升級 OpenSSH。
- ✔️ 若不能升級 OpenSSH,就使用本文的兼容參數連線,但只建議短期使用。