【问题标题】:Can't run "ssh -X" on MacOS Sierra无法在 MacOS Sierra 上运行“ssh -X”
【发布时间】:2017-01-30 00:51:30
【问题描述】:

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

编辑:

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

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

【问题讨论】:

  • 你升级的是客户端还是服务器?
  • @arkascha 抱歉,请澄清一下。我正在运行 MacOS Sierra(客户端),试图通过 ssh 进入 Ubuntu 服务器。
  • 你真的在你的 Mac 上运行 X 服务器吗?在您的 mac shell 中,DISPLAY 环境设置为什么?您能否使用“-vv”选项和edit 运行 ssh 以包含调试输出?
  • @Kenster 我发现一个对 X11 的引用可能是问题所在。对可能发生的事情有任何想法吗?还是我应该等待 XQuartz 的更新或其他什么?
  • 我通过在 High Sierra 上重新安装 XQuartz 解决了我的问题。

标签: ssh terminal xterm macos-sierra


【解决方案1】:

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

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

【讨论】:

  • 当我尝试 -Y 我仍然得到这个错误:警告:没有 xauth 数据;使用伪造的身份验证数据进行 X11 转发。
  • ssh -Y 为我修复了它(升级到 High Sierra 后),我收到了@Dodie 写的警告,但它仍然有效。
【解决方案2】:

我注意到 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
    • [2017 年 7 月 10 日更新] 当您重新安装 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

【讨论】:

  • 我试过这样做,但对我没有任何改变。对我的机器有什么不同的想法吗?
  • 您是否尝试过重新安装 Mac 使用的任何 xAuth 工具(我猜是 X11)?我也这样做了。我怀疑是否仅此而已,所以我没有提及它,但我想这是我尝试过的另一件事。
  • 重新安装 XQuartz 终于成功了!我没有想到要尝试,因为我正在等待 XQuartz 的新版本。谢谢!
  • 我认为 Matt 对所需 XAuthLocation 的观察是关键。我只打开了 X11Forwarding yes (显示偏移默认为 10,所以我没有设置),X 仍然没有工作,但是一旦我设置了 XAuthLocation,我现在可以在我的 mini 上使用 X11。 @MattWidjaja 包含在 OSX 上重置 sshd 的说明,您可以获得额外的奖励积分——谢谢!!!
  • /System/Library/LaunchDaemons/ssh.plist: Could not find specified service
【解决方案3】:

我不需要重新安装 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(允许不受信任的 X11 连接超过 20 分钟默认值)

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

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

ServerAliveInterval 行也是一个可选的首选项。

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

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

【讨论】:

  • 我已经使用 ssh -Y 多年了。然而,Sierra 似乎仍然存在一个新问题:如果远程窗口使用 OpenGL,那么它会以各种方式失败,具体取决于 X 服务器。 XQuartz 似乎只是放弃了,而其他人报告说 xorg 不会崩溃,但也不会重新绘制损坏的窗口。
  • 在 10.12 我不得不使用这个:sudo /etc/ssh/ssh_config 我添加了这些行:Host * XAuthLocation /opt/X11/bin/xauth ServerAliveInterval 60 ForwardX11Timeout 596h
  • 可以根据每个用户将其粘贴在 $HOME/.ssh/config 中。感谢您找到设置。
  • 我认为为所有人放置 XAuthLocation 是有意义的。也许其他设置可以是每个用户,但我还没有尝试过。
  • 刚刚来到这里评论 3 年多后,这个解决方案在 Mojave 上仍然是必要和有效的。 X 知识正慢慢变得更加神秘!
【解决方案4】:

只需添加一行XAuthLocation /usr/X11/bin/xauth/etc/ssh/ssh_config 就可以在我的 Mac 上运行,运行 MacOS Sierra,通过 ssh 进入 Linux 主机,并能够远程运行 X Windows 程序并让它们在我的 Mac 上的 XQuartz 下显示。

【讨论】:

  • 自然需要重启现有的 ssh 连接。我被卡住了一段时间,需要在此设置生效之前完全关闭与 ControlPersist 的连接 - 它显然仅适用于主连接,而不适用于从连接。
【解决方案5】:

刚刚将我的 macbook 从 El Capitan 升级到 Sierra。使用 ssh -X [linux server] 简单地重新安装 Xquartz 对我来说已经完成了

【讨论】:

  • 这是首先要尝试的东西。为我工作。
【解决方案6】:

我对此的解决方案如下。

(1) 在尝试ssh -X 之前启动xquartz。在 xquartz 选项中,我只是启用了“登录时打开”,然后它总是在后台运行。

(2) 转到xquartz 首选项菜单,然后在“安全”窗口中,单击“允许来自客户端的连接”框。

做完这些事情后,一切正常。

【讨论】:

    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

        重新启动 XQuartz 对我有用。

        【讨论】:

          【解决方案10】:

          这是一个老问题,但我最近在运行 10.12.6 的 Mac 上遇到了同样的问题。 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
          猜你喜欢
          • 2018-12-12
          • 1970-01-01
          • 1970-01-01
          • 2017-06-26
          • 2017-03-12
          • 2017-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多