服务器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。
编辑:编辑示例代码以正确暗示我的意思
答案 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/的更多详细信息。