我通常可以弄清楚这一点,但我觉得我做的事情根本上是错误的。
我有一个 munin 服务器和客户端。效果很好。它们都位于专用网络上。我现在想忘记我拥有的 munin 服务器,而是使用位于互联网上的 munin 服务器。 Internet 上的服务器接受 ssh 连接。因此,我认为我可以创建一个从客户端到服务器的 ssh 隧道,然后让服务器查询 munin 客户端。所以基本上:
远程客户端----路由器----[互联网]----服务器
到目前为止,我已经读过这个有希望的问题。但它还没有成功。我也读过这个在常见问题解答中,但在多次阅读常见问题解答后,我非常确定该常见问题解答明确指出服务器将启动 ssh 连接到客户。
我正在尝试做相反的事情。
我在客户端使用这个:
ssh -L 49499:localhost:4949 -f [email protected] -p 2222 -N
(是的,ssh 监听 2222)
在客户端 munin 配置上,我有:
[remoteclient]
address 127.0.0.1
port 49499
use_node_name yes
在服务器上,它失败了:
starting work in 6794 for remoteclient/127.0.0.1:49499
[FATAL] Socket read from remoteclient failed. Terminating process. at /usr/share/perl5/Munin/Master/UpdateWorker.pm line 254.
再说一遍,我认为我想做的与我正在阅读的其他常见问题解答/项目相反。
答案1
RemoteForward
指定远程计算机上的 TCP 端口通过安全通道转发。
所以在客户端:
ssh -L 49499:localhost:4949 -f [email protected] -p 2222 -N
应该简单地替换为:
ssh -R 49499:localhost:4949 -f [email protected] -p 2222 -N
这样,远程计算机:服务器将在其本地主机上打开一个端口,该端口将通过隧道流量转发回客户端的本地主机(即:仍然保留在隧道出口处的客户端上)。