啟用 ssh -X 或 ForwardX11 yes 時遇到 X11 forwarding request failed on channel 0,通常源於 xauth 缺失、sshd_config 綁定地址錯誤、IPv6 衝突或顯示器號碼衝突。本文提供分級排查流程與針對性修復方案。
# 客戶端
ssh -X user@server # -X 信任轉發, -Y 無信任轉發
echo $DISPLAY # 應顯示 localhost:10.0 等
# 伺服器端
grep -i x11 /etc/ssh/sshd_config
# X11Forwarding yes
# X11UseLocalhost yes/no
# XAuthLocation /usr/bin/xauth
現象:X11UseLocalhost yes (預設) 將 X11 轉發綁定到 127.0.0.1,某些 X11 客戶端 (特別是舊版、跨平台 X Server) 無法正確處理回環地址。
sudo vim /etc/ssh/sshd_config
# 修改或添加
X11Forwarding yes
X11UseLocalhost no # 關鍵:綁定到 0.0.0.0 (所有介面)
sudo systemctl restart sshd
# 或
sudo service ssh restart


yes:DISPLAY=localhost:10.0,只監聽 127.0.0.1:6010no:DISPLAY=hostname:10.0,監聽 0.0.0.0:6010,相容性更好no 允許本機其他用戶連接 X 轉發,但通常可接受現象:伺服器停用 IPv6,但 SSH 嘗試使用 IPv6 綁定 X11 轉發。
sudo vim /etc/ssh/sshd_config
# 取消註釋或添加
AddressFamily inet # 僅 IPv4
# 注意:AddressFamily any 為預設 (IPv4+IPv6),inet 僅 IPv4
sudo systemctl restart sshd
驗證:ss -tlnp | grep 601 應只顯示 IPv4 監聽 (0.0.0.0:6010 或 ::1:6010)。
# 伺服器端安裝 xauth
apt install xauth # Debian/Ubuntu
yum install xauth # RHEL/CentOS
dnf install xauth # Fedora
# 確認路徑
which xauth # /usr/bin/xauth
# sshd_config 指定
XAuthLocation /usr/bin/xauth
# 用戶家目錄權限
chmod 700 ~
chmod 600 ~/.Xauthority # 若存在
# 檢查當前佔用的顯示器號碼
ls /tmp/.X11-unix/
# X0, X10, X11...
# 手動指定較大號碼避開衝突
ssh -X -o "SendEnv=DISPLAY" user@server
# 伺服器端會自動分配下一個可用號碼 (通常從 10 開始)
| 平台 | X Server | 關鍵設定 |
|---|---|---|
| Windows | VcXsrv / Xming / MobaXterm | 勾選 "Disable access control" / "-ac" 參數 |
| macOS | XQuartz | 偏好設定 → 安全性 → "允許來自網路的連線" |
| Linux | 原生 Xorg/Wayland | 通常無需額外設定 |
# 1. 伺服器端確認 xauth 列表
ssh user@server 'xauth list'
# 應顯示類似: server/unix:10 MIT-MAGIC-COOKIE-1 xxxxxxxx
# 2. 客戶端確認 DISPLAY
ssh -X user@server 'echo $DISPLAY'
# 應輸出: localhost:10.0 或 hostname:10.0
# 3. 測試圖形程式
ssh -X user@server 'xclock'
# 或
ssh -X user@server 'xeyes'
# 應在本地彈出視窗
# X11 Forwarding 安全配置
X11Forwarding yes
X11UseLocalhost no # 解決大多數相容性問題
XAuthLocation /usr/bin/xauth
AddressFamily inet # 僅 IPv4,避免 IPv6 衝突
AllowAgentForwarding yes # 通常配合 SSH Agent 使用
AllowTcpForwarding yes # 通用 TCP 轉發
# 安全強化 (可選)
# X11Forwarding yes 僅對信任用戶/主機
# Match Group x11users
# X11Forwarding yes
# X11UseLocalhost no
| 指令 | 用途 |
|---|---|
ssh -v -X user@host | 客戶端詳細除錯輸出 (看 X11 協商過程) |
ssh -vvv -X user@host | 極詳細除錯 |
journalctl -u sshd -f | 伺服器端即時日誌 |
xauth list | 查看當前授權 Cookie |
xauth info | 顯示授權檔案資訊 |
netstat -tlnp | grep 601 | 查看 X11 轉發監聽埠 |
ps aux | grep ssh | 確認 SSH 進程參數 |
xwayland 套件XDG_SESSION_TYPE=x11 強制 X11 會話X11 forwarding request failed on channel 0 90% 以上由 X11UseLocalhost yes 引起,改為 no 即可解決。剩餘 10% 涉及 xauth 缺失、IPv6 衝突、顯示器號碼衝突、客戶端 X Server 配置。系統化排查:sshd_config → xauth → 網路綁定 → 客戶端設定 → Wayland 相容,逐項驗證必能解決。