这个例子与 MongoDB 相关,但核心问题在于 SSH 隧道,不过 MongoDB 的东西应该会有所价值
你好,
我正在尝试启动一个本地 MongoDB 节点,该节点是位于数据中心的 ReplicaSet 的一部分。TCP/IP 将通过 SSH 从本地传输到数据中心。
所有机器(本地和数据中心)都运行 CentOS。
使用以下命令在数据中心 box1 上创建到本地节点的隧道时,此方法有效:
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 可以使用命令访问本地节点 Mongo shell (命令 1):
mongo --host localhost --port 27017
box2 还可以使用命令访问本地节点 Mongo shell (命令2):
mongo --host box1 --port 27017
数据中心的 box2 也可以连接到 box1:27017,即我的本地节点的转发端口。
但是,最好、更简单,并且应该可以在与上述相同的端口上在本地节点和 box1 之间设置反向转发。使用以下命令:
ssh -v -4 -f -N -o TCPKeepAlive=no -o ServerAliveInterval=15 -R27017:127.0.0.1:27017 -g a_user@box1
现在我可以使用从 box1 连接到本地节点命令 1然而,命令2失败:
Error: couldn't connect to server box1:27017} (anon):1139 exception: connect failed
有任何想法吗?
答案1
默认情况下,-R
只监听环回接口(默认是-L
所有接口)。因此,cmd1 可以工作,因为它在 box1 上本地运行,但 cmd2 会失败,因为它在 box2 上运行。解决方法是更改-R
为以下之一:
-R:27017:127.0.0.1:27017
-R'*:27017:127.0.0.1:27017'
答案2
我能想到的只是 TCP Wrappers 或其他身份验证失败了。/var/log/auth.log
如果它是基于 Debian 的操作系统或类似操作系统,会有什么问题吗?