使用已设置X服务器的vagrant进行SSH连接

9

我在vagrant虚拟机上设置X11转发时遇到了问题。

我使用Xming作为X服务器和PuTTY作为SSH客户端。

当我运行vagrant ssh-config命令时,会得到以下输出:

Host default
  HostName 127.0.0.1
  User vagrant
  Port 2200
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/Users/MyName/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes
  ForwardX11 yes

我的PuTTY启用了X11转发,并将X显示位置设置为0.0

当我执行echo $DISPLAY时,没有任何响应。

我不确定我配置错误了什么。我按照以下建议设置了我的PuTTY客户端。如果有更简单的方法设置带有X11转发的VM,请告诉我。

供参考,这是我的Vagrantfile的内容。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.ssh.forward_agent = true
  config.ssh.forward_x11 = true

end

通过遵循这个建议,使用Cygwin作为X服务器解决了这个问题。 - Matt
请您将其作为下面的答案添加并接受吗?评论不是正确答案的最佳位置。 - Radek Simko
@RadekSimko 已完成。感谢您指出! - Matt
3个回答

9
我曾经遇到过类似的问题,但在我的情况下,这是由于Vagrant虚拟机出了问题。以下是一些要检查的事项:
  • X11Forwarding需要在/etc/ssh/sshd_config中被设置为yes
  • 启用ssh的详细日志记录(vagrant ssh -- -vvv -X在Linux中, Putty似乎也有一个-v命令行标志),并查找有趣的消息。

对于我的Vagrant虚拟机,后者显示了以下消息:

debug1: Remote: No xauth program; cannot forward with spoofing

安装提供 xauth 的软件包(如xorg-xauthxorg-x11-xauth或类似软件包),就可以正常使用vagrant ssh -- -X命令。

1
sshd_config 中的设置是大多数描述中未提及的秘密酱! - starfry

5

按照此网站所述,安装Cygwin,并安装以下软件包以解决问题:

  • xorg-server
  • xinit
  • xorg-docs(用于文档)
  • openssh(如果之前未安装)

然后通过在Cygwin终端中键入startxwin来启动窗口。

我后来发现一个提示是最好使用以下命令ssh到vagrant:

vagrant -Y ssh

而不是:

vagrant -X ssh

后者处于不受信任的模式,正如此答案所述,它会在一段时间后超时。


1
使用"startxwin"运行cygwin X服务器。使用putty或者cygwin ssh客户端ssh到你的虚拟机中。
如果使用cygwin ssh,请在运行ssh之前执行"export DISPLAY=:0"(即“vagrant ssh -- -vvv -X”)。
对于putty:运行"startxwin -- -listen tcp",在putty连接配置中启用ssh-X11转发,将"X显示位置"设置为"localhost:0"并设置.Xauthority文件的正确路径(浏览,它可能在你的主目录中;startxwin输出将告诉你它在哪里)。
也许不要使用msys2 ssh(vagrant默认安装环境是msys2,但在cygwin下vagrant也可以正常工作)与cygwin X服务器一起使用。(有关更多信息请参见详细信息)
详情:
如果出现"connect /tmp/.X11-unix/X0: No such file or directory"(在ssh verbose模式下)或putty错误"PuTTY X11 proxy: unable to connect to forwarded X server: Network error: Connection refused",尝试使用tcp套接字而不是默认的unix域套接字。
当您运行Cygwin X服务器时,请输入“X -listen tcp -multiwindow”(multiwindow是可选的,它为每个应用程序打开新窗口)。
如果使用命令行中的openssh“ssh”:在进行“vagrant ssh -- -vvv -X”之前,请输入“export DISPLAY = localhost:0”(不是“:0”,而是“localhost:0”,因此它使用tcp)。我正在运行git bash,它使用msys2,似乎无法通过模拟的unix域套接字与我的cygwin X服务器正常通信。但是,如果我在我的cygwin提示符下使用“vagrant ssh -- -X”(使用DISPLAY =:0进行unix域套接字),它可以工作。
伟大的信息来源:http://dustwell.com/how-x-over-ssh-really-works.html 此外,您可以在Vagrantfile中添加“config.ssh.forward_x11 = true”。我认为这将在设置客户虚拟机或运行“vagrant reload”时,在“/etc/ssh/sshd_config”中设置X11Forwarding。- https://coderwall.com/p/ozhfva/run-graphical-programs-within-vagrantboxes 更新:不建议在没有xauth安全性的情况下运行X(如上所示)。这是不安全的。例如,同一局域网中的其他计算机可以通过tcp连接到您的x服务器,并使用xkeys嗅探您的按键。改用“startxwin”而不是直接运行X,以便它使用XWin的“-auth”选项。这使得我很难让我的msys2 ssh将X重定向到我的cygwin X服务器。连接时的ssh日志显示无法找到xauth命令-因为它在我的msys2环境中不存在。Cygwin ssh X-redirection仍然正常工作。只要在putty会话配置中设置.Xauthority文件路径(它可能就在您的主目录中),Putty就可以正常工作。
我发现tcp/unix-domain套接字问题/解决方案实际上在cygwin faq中(这个faq非常有帮助,包含了很多信息):
6.7. 通过PuTTY转发的X会话无法连接。非cygwin本地X客户端无法连接。
X服务器现在默认使用-nolisten tcp,这通过不打开TCP/IP套接字,仅打开本地(UNIX域)套接字来增加X服务器的安全性。非cygwin应用程序无法连接该套接字。

https://x.cygwin.com/docs/faq/cygwin-x-faq.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接