2013-02-10 60 views
0

我想避免直接访问系统A. 然而,在系统A上运行的服务C如何扭转在代理服务器上的访问

有可能访问的其他系统B由任何人。

我想“前进”从B请求到A的方式,用户能想到的服务,C是B.

技术上运行我知道如何实现两个网络的程序(d和E)来实现这一目标需求。 D在系统A上运行,连接到系统B上运行的E上。

对B服务的任何请求都将从E转发到D. D将请求传递给“真实”服务C.并且当然是以相反的顺序响应。

Network Access Anyone -> B <- A 
Programs E <- D 

Service flow Anyone -> E -> D -> C 

对于一个谁是仍与我:

请问我做这样的节目时推倒重来

换句话说,是否已经有一个开源/ linux程序在做这个功能?

+1

调查SSH隧道... – artbristol 2013-02-10 21:36:54

回答

2

这看起来像是SSH隧道的教科书用例。

在服务器A上,安装一个SSH服务器(例如,如果它是Debian,请安装软件包openssh-server)。在服务器B,运行下面的命令:

ssh -f [email protected] -L BPORT:AHOST:APORT -N 

其中SERVICEUSER是用户的服务作为运行的名称,A是主机名或A的IP,BPORT是服务应可在该端口的数目在服务器B上,APORT是在服务器A上侦听该服务的端口。以下是更多信息:http://www.revsys.com/writings/quicktips/ssh-tunnel.html

您必须在每次重新引导后运行此命令,因此最好为其编写一个初始化脚本以便它可以像服务一样进行管理。从这里开始:http://www.thegeekstuff.com/2012/03/lsbinit-script/

为了避免输入SERVICEUSER的密码,这在init脚本中是不可能的,您还需要在服务器B上生成私有SSH密钥并将其添加到SERVICEUSER的authorized_keys文件中,这可能涉及为SERVICEUSER创建一个主目录。使用usermod -d命令来执行此操作:http://linux.die.net/man/8/usermod然后关注http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html需要记住的一个常见错误是,authorized_keys文件和.ssh目录都必须为chmod ed并且由SERVICEUSER拥有,否则SSH服务器将忽略它们。

+0

我理解是否正确,这个解决方案需要从服务器B访问服务器A? – 2013-02-11 12:54:52

+0

它需要从服务器B访问服务器A上的SSH服务(通常是端口22,但您可以对其进行配置)。不需要其他远程访问A - 您可以在A上配置防火墙,只接受来自B端口22的连接并拒绝所有其他端口。 A和B之间的连接将被加密。 – 2013-02-11 19:43:02

相关问题