从Mac上通过SSH使用X11

所以这是我的情况:我为我的学校工作,作为技术。 我们的其中一台服务器存在防火墙问题,不接受来自外部的连接。

我试图SSH进入其中一个正在工作的服务器,然后使用Mac的terminalSSH进入问题服务器:

ssh -X11 -2 [email protected] # runs some Linux (don't remember which distro) ssh -X11 -2 [email protected] # runs Ubuntu 11.04 

如果我尝试运行鹦鹉螺,我会得到“X11连接被拒绝,因为错误的身份validation”。 连续四次,然后“无法parsing参数:无法打开显示:”

我可以等待IT来解决防火墙问题,但是我有一些工作需要尽快完成,使用命令行会使事情变得相当缓慢。

旁注:我不认为goodserver安装了X11。

可以做到这一点,但不是你的想法。 您想要做的是使用SSH ProxyCommandconfiguration选项(请参阅ssh_config (5))以允许您直接从本地计算机到目标计算机build立SSH连接,在一个或多个其他连接内部build立SSH连接。 你不是在制造多个“啤酒花”,只是一系列的隧道。

使用像@ womble这样的ProxyCommand告诉你工作。 对我而言,另一种方式也是有效的。 我还需要偶尔从另一台服务器后面的计算机运行远程X程序,所以我需要从笔记本电脑连接到服务器,然后从那里连接到我的最终目的地。 我这样做:

 ssh -YC me@myserver 

然后从服务器

 ssh -YC me@myanothercomputer 

所以我使用-YC而不是-X 。 即使-C是不需要的,它只是压缩,如果我在一个缓慢的连接背后,它可以帮助我一点。

旁注:我不认为goodserver安装了X11。

我认为这是问题 – ssh -X将尝试将任何远程传入X连接转发到本地X服务器,如果没有本地X库等,这似乎是不可能的。 (这可能是SSH实际使用X库进行cookie重写。)

我只是尝试了你的命令,而且工作正常 – 但是这里的中间服务器也有X二进制文件。 (虽然没有显示器。)

因此,请使用womble提出的build议:使用一个到goodserver的SSH连接,在此连接中创build一个隧道,然后通过此隧道运行第二个连接。 (我通常使用Java的JSch SSH客户端库来执行此操作,但也可以使用命令行SSH。)

 ssh -L localhost:2222:badserver:22 -N root@goodserver & ssh -X -p 2222 root@localhost 

对于第二个命令,您可能需要使用-o NoHostAuthenticationForLocalHost=yes ,以避免您的SSH客户端在您的已知主机文件中已经存在用于localhost的另一个密钥时发出嚎叫。