ssh隧道奇怪

这个例子与MongoDB有关,但是核心问题是SSH隧道,MongoDB的东西应该增加值

嗨,

我试图调出一个本地的MongoDB节点,它是基于数据中心的ReplicaSet的一部分。 TCP / IP将通过SSH从本地传输到数据中心。

所有的盒子,本地和数据中心都在运行CentOS。

在数据中心box1上使用以下命令在本地节点上创build隧道时可以正常工作:

ssh -v -4 -f -N -o TCPKeepAlive=no -o ServerAliveInterval=15 -L27017:127.0.0.1:27017 -g a_user@server_i_have_ssh_access_to 

box1可以使用命令( cmd 1 )访问本地节点的Mongo shell:

 mongo --host localhost --port 27017 

box2也可以用命令( cmd 2 )访问本地节点的Mongo shell:

 mongo --host box1 --port 27017 

数据中心的box2也可以连接到我的本地节点转发的端口box1:27017。

然而,它会更好,更简单,而且应该可以在本地节点和box1之间build立一个与上面相同的端口。 使用命令:

 ssh -v -4 -f -N -o TCPKeepAlive=no -o ServerAliveInterval=15 -R27017:127.0.0.1:27017 -g a_user@box1 

现在我可以从box1连接到使用上面的cmd 1的本地节点,但是, cmd 2失败:

 Error: couldn't connect to server box1:27017} (anon):1139 exception: connect failed 

有任何想法吗?

默认情况下, -R只监听回送接口( -L的默认值是所有接口)。 因此,cmd1可以工作,因为它在box1上本地运行,但是cmd2因为在box2上运行而失败。 解决方法是将-R更改为以下之一:

 -R:27017:127.0.0.1:27017 -R'*:27017:127.0.0.1:27017' 

所有我能想到的是TCP包装或其他authentication失败。 如果是基于Debian的操作系统或类似软件,在/var/log/auth.log有什么?