Skip to content

SSH X11 转发

1. 前置条件检查

确保客户端和服务器均满足以下要求:

  • 安装 X Window System 核心组件:
    bash
    # Debian/Ubuntu
    sudo apt install xauth xorg
    
    # RHEL/CentOS
    sudo yum install xorg-x11-xauth xorg-x11-server-utils
  • 确认 SSH 客户端和服务端版本 ≥ 4.0(建议使用 OpenSSH 8.0+ 获得更好的安全支持)

2. 服务器端配置

修改 /etc/ssh/sshd_config

text
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no  # 允许远程客户端连接
AddressFamily inet  # 强制 IPv4(可选)

重启 SSH 服务:

bash
sudo systemctl restart sshd

验证配置:

bash
sshd -T | grep x11
# 应返回 x11forwarding yes

3. 客户端配置

3.1 基础配置

修改 /etc/ssh/ssh_config~/.ssh/config

text
Host *
    ForwardX11          yes
    ForwardX11Trusted   yes  # 允许全功能转发
    XAuthLocation       /usr/bin/xauth

3.2 连接命令

使用以下任意方式连接:

bash
ssh -X user@host  # 基础转发
ssh -Y user@host  # 信任模式转发(适用于现代 Xorg)

3.3 macOS 特别配置

安装 XQuartz:

bash
brew install --cask xquartz

启动 XQuartz 后需在首选项中启用:

text
[X11] → [Security] → 勾选 "Allow connections from network clients"

4. 验证配置

在服务器执行:

bash
echo $DISPLAY  # 应返回类似 localhost:10.0
xclock &       # 测试时钟显示

成功时会出现图形界面:

5. 高级配置技巧

5.1 多显示器支持

设置 DISPLAY 变量:

bash
export DISPLAY=$(grep -oP '(?<=:)\d+' <<< $DISPLAY).0

5.2 性能优化

启用压缩和调整加密算法:

bash
ssh -C -c aes128-gcm@openssh.com -Y user@host

5.3 持久化配置

~/.bashrc 添加:

bash
if [ -n "$SSH_CLIENT" ]; then
    export XAUTHORITY=~/.Xauthority
    export LIBGL_ALWAYS_INDIRECT=1
fi

6. 故障排查

6.1 常见错误处理

  • X11 拒绝连接

    bash
    vim /etc/ssh/sshd_config
    # 确认 X11UseLocalhost=no
  • Missing xauth

    bash
    ln -s /usr/bin/xauth /usr/local/bin/xauth
  • Wayland 兼容问题

    bash
    sudo update-alternatives --set x-session-manager /usr/bin/startxfce4

6.2 调试命令

bash
ssh -vvv -X user@host        # 显示详细连接日志
xauth list                   # 查看认证记录
netstat -tuln | grep 6010    # 检查端口监听

7. 安全注意事项

  • 建议仅在可信网络使用 -Y 信任模式
  • 禁用 X11 TCP 监听:
    bash
    sudo sed -i 's/^#X11UseLocalhost.*/X11UseLocalhost yes/' /etc/ssh/sshd_config
  • 监控 X11 流量:
    bash
    sudo tcpdump -i any -n port 6010

通过以上配置,用户可以在保证安全性的前提下,流畅地使用远程图形应用程序。典型应用场景包括:

  1. 运行 MATLAB/PyCharm 等 IDE
  2. 使用 gnuplot 生成实时图表
  3. 操作基于 GUI 的数据库管理工具

8. X11 穿透 FireFox 浏览器

输入以下命令:

bash
export XAUTHORITY=$HOME/.Xauthority
firefox

Firefox