无法在 MacOS Sierra 上 运行 "ssh -X"

Can't run "ssh -X" on MacOS Sierra

我刚升级到 MacOS Sierra,我意识到我似乎无法再在终端中 运行 "ssh -X" 命令。它曾经启动 xterm windows,但现在我好像连 -X 选项都没有了。在我更新之前它工作得非常好。除了从 OS X Yosemite 到 MacOS Sierra,我没有在设置中更改任何其他内容。

编辑:

根据建议,这是我在调试日志中发现的可能导致此问题的内容。

debug1: No xauth program.
Warning: untrusted X11 forwarding setup failed: xauth key data not generated

升级到 Mac OS X Sierra 后,我在使用 -X 选项转发 X11 时遇到了同样的问题。

查看 ssh 选项 -Y(受信任的 X11 转发)。在使用 ssh -Y <host> 时,事情对我有用。

我注意到 macOS Sierra 重置了我的 X11 设置,因此它禁用了我的 xAuth 程序。要在 macOS Sierra 上重新启用 xAuth:

  1. 重新安装 X11/xQuartz 大概会重置 macOS Sierra 所做的任何更改。我也在下面进行了以下更改,尽管听起来这可能就足够了。
  2. 加载终端
  3. sudo <text editor of your choice> /etc/ssh/sshd_config
  4. 在该文件中,取消注释以下行,并将其设置为以下值:
    • X11Forwarding yes
    • X11DisplayOffset 10
    • [更新于 10/07/2017] 当您重新安装 X11/XQuartz 时,最重要的是,它应该添加:XAuthLocation <path_to_your_xauth> 我的 /opt/X11/bin/xauth。这可能是解释为什么重新安装有效的黄金步骤。
  5. 通过终端重新启动 ssh。我通过 运行 做到了这一点:
    • sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
    • sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

我不需要重新安装 XQuartz,但是根据 Matt Widjaja 的回答,我想出了一个改进。

  • sudo vi /etc/ssh/ssh_config(这是 ssh 客户端配置,不是 sshd_config)
    • Host * 条目下添加(或在适当的地方添加每个主机)
      • XAuthLocation /usr/X11/bin/xauth(xauth 的位置在 Sierra 中发生了变化)
      • ServerAliveInterval 60(每 60 秒 Ping 服务器以保持 ssh 连接有效)
      • ForwardX11Timeout 596h(允许超过 20 分钟默认值的不受信任的 X11 连接)

无需重新启动 ssh,当然,现有的 ssh 客户端连接除外。

听起来 -Y(可信 X11)比不可信更可取。如果切换到受信任,则可能会删除 ForwardX11Timeout 行。

ServerAliveInterval 行也是可选的首选项。

也可以在 ~/.ssh/config(用户的配置文件)中进行这些更改,但权限必须正确。

编辑:我删除了 ForwardX11 和 ForwardX11Trusted。它们不是必需的,而且 ForwardX11 的安全性较低并且会导致 git(或其他使用 ssh 的工具)出现问题。

只需将一行 XAuthLocation /usr/X11/bin/xauth 添加到 /etc/ssh/ssh_config 即可在我的 Mac、运行ning MacOS Sierra 上运行到 ssh进入 Linux 主机并能够远程 运行 X Windows 程序并让它们显示在我的 Mac.

上的 XQuartz 下

刚刚将我的 macbook 从 El Capitan 升级到 Sierra。使用 ssh -X [linux server]

只需重新安装 Xquartz 就可以解决问题

我的解决方案如下。

(1) 在尝试 ssh -X 之前启动 xquartz。在xquartz选项里面,我只是开启了'Open at login',然后后台一直是运行。

(2) 转到 xquartz 首选项菜单,然后在安全性 window 上,单击显示 "Allow connections from clients".

的框

完成这些之后,一切正常。

我花了一整天的时间寻找解决方案,才发现最近的 Sierra 没有安装 XQuartz https://support.apple.com/en-gb/HT201341. Upon install (https://www.xquartz.org/)一切正常。

如果安装了 Quartz,只需在 /etc/ssh/ssh_config 文件的 "Host *" 下添加行 "X11Trusted yes"。

重新启动 XQuartz 对我有用。

这是一个老问题,但我最近 运行 在我的 Mac 运行 10.12.6 上遇到了同样的问题。 DISPLAY 变量未在终端中设置,ssh -X 不起作用。这就是我所做的解决问题的方法:

  1. 使用 Homebrew 重新安装 XQuartz: brew cask install xquartz(可能需要选项 --forced

  2. 将 XQuartz 启动器添加到系统默认值(遵循此 Reddit post 中的解决方案: launchctl load -w /Library/LaunchAgents/org.macosforge.xquartz.startx.plist

  3. 重启系统。

完成这些后,我的 DISPLAY 变量设置正确:

$ echo $DISPLAY /private/tmp/com.apple.launchd.mfXFpzZ0gC/org.macosforge.xquartz:0

并且 ssh 中的 X11 转发也能正常工作。

在我的例子中,在通过 brew install --cask xquartz 安装 XQaurtz 后在 macOS 主机上将 XAuthLocation /opt/X11/bin/xauth 添加到 /etc/ssh/sshd_config (注意它不是 /etc/ssh/ssh_config),因为 XQaurtz 提供 xauth二进制