2016-02-13 110 views
0

服务器B以例如192.168.1.130连接到专用网络。 服务器A可以使用ssh使用其公共ip连接; 132.x.x.x. 我将如何使用ssh连接到B,以便它首先连接到A,从B连接到B,因为B不能直接连接到外部网络。 我想从做自己限制是: 用户@当地:$ ssh的一个@一个我如何使用公共主机连接到私人主机?

一个@阿:$ SSH b @乙

而是我在找做什么沿着线:

用户@本地:$ SSH b @乙

在内部连接到@ A和则b @ b中。

我该如何实现这一套ubuntu服务器?

我试图编辑的〜/ .ssh /配置包括

Host A 
    User a 
    HostName 192.x.x.x 
Host B 
    User b 
    ProxyCommand ssh -q A nc -q0 192.x.x.x 22 

当从 “a @ A” 运行b @ B获得我期望的输出,该输出通过连​​接a至b(虽然相当无意义)。我如何才能达到这个目标,在其系统上无法编辑配置文件或类似的用户。

PS:A有一个public ip而B被限制为私人 ip。

编辑:编辑的示例代码正确地意味着什么,我想意思

+0

我想实现的是告诉世界,如果你想访问B,使用“ssh b @ B”。我不想告诉他们有关服务器A本身,而是我希望服务器A自动通过A自动重定向请求访问B的用户。我拥有的是A和B都指向相同的主机,即A。因此@B与@A相同。 –

回答

0

显然ProxyCommand可以在命令行通过-o通过;不太漂亮,但似乎是预期的方法。

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts

作为一个说明,虽然,我想你可能已经得到其中以A/B为公共/私人倒退,因为你最初的一段似乎违背你的最后陈述。

关于确切解决方案http://www.cyberciti.biz/faq/linux-unix-ssh-proxycommand-passing-through-one-host-gateway-server/的更多详细信息和图表。

+0

'$ ssh -tt一个ssh -tt B' 工作得很好,完成了我所需要的工作。 然而,如果没有列表A,则可以执行与上述相同的命令。另外,作为要求,也可以使B指向A的IP地址。虽然我的主要要求是通过A –

+0

噢隧道到B;这听起来像你有一些不兼容的要求,如(1)根本不编辑配置文件,(2)没有在命令行中列出A.在这种情况下,除非你有脚本或者列表A,否则SSH根本无法知道主机A. – user508633

+0

假设用户x正在连接公共ip,并且他希望连接到主机B;我需要的是他输入ssh b @ B。 B然而与A具有相同的IP。他们都被重定向到了@A。然后系统A知道该请求不是为了它而是主管B,然后将用户x重定向到主机B或b @ B。 –

1

使用ProxyCommand的首选方式是使用-W开关。 nc版本要求在跳转盒上安装netcat

Host A 
    User a 
    HostName 192.x.x.x 
Host B 
    User b 
    ProxyCommand ssh -W %h:%p A 

而且请注意字母大小写!在你的例子中你有那里的大写用户。也不要放在那里-q切换,直到你知道它工作正常。它不会,请在ssh命令中添加一些-vvv以查看发生了什么以及发生了什么故障。

+0

啊,非常有趣,我不知道SSH现在为此目的嵌入了netcat功能。很酷的功能! (虽然我想知道它是否有任何有趣的安全隐患......) – user508633