如何使用公共主机连接到私人主机?

时间:2016-02-13 10:04:21

标签: networking ssh server

服务器B连接到专用网络,例如192.168.1.130。 服务器A可以使用ssh使用其公共IP连接; 132.x.x.x. 如何使用ssh连接到B,使其首先连接到A,从而建立与B的连接,因为B不能从外部网络直接连接到B. 我想限制自己做的是: user @ local :$ ssh a @ A

a @ A :$ ssh b @ B

相反,我正在寻找按照以下方式做的事情:

user @ local :$ ssh b @ B

内部连接到@ A然后b @ B。

我如何为一组ubuntu服务器实现这个?

我已尝试编辑〜/ .ssh / config 以包含

 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有公开 ip,而B只限于私有 ip。

编辑:编辑示例代码以正确暗示我的意思

2 个答案:

答案 0 :(得分: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开关。它没有,在-vvv命令中添加一些ssh来查看那里发生了什么以及失败了什么。

答案 1 :(得分:0)

显然,ProxyCommand可以通过<?php ini_set('include_path', '/myfolder'); include('Net/SSH2.php'); $ssh = new Net_SSH2('1.1.1.1'); if (!$ssh->login('root', 'foobar')) { exit('Login Failed'); } echo $ssh->exec('service nginx reload'); ?> 在命令行上传递;不太漂亮,但似乎是预期的方法。

请参阅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/的更多详细信息。