我在Java项目中,我们必须与其他机器的CLI进行通信。不幸的是,我们无法直接连接到这些其他机器,另一个坏运气是它们只支持telnet。所以我们有以下设置,当然是刻在石头上的:
application <---- telnet or ssh ----> gateway <---- telnet ----> machine_001
(10.0.0.1) (192.168.1.1) (192.168.2.1)
(192.168.2.2)
( ... )
可以通过SSH或telnet手动连接到网关(例如使用PuTTY),从此shell telnet到其中一台机器并使用其CLI。由于我们希望自动进行通信,因此应用程序必须能够自己与机器通信;所以我需要一个程序化的解决方案。
在互联网上进行一些研究之后,我发现了一个名为JSch的图书馆看起来很有希望,但我遇到了一个邪恶的问题。当应用程序连接到网关时,telnet命令以及目标计算机的整个CLI是应用程序角度的单个命令。因此,如果需要,我必须努力解决非终止的InputStream,非同步的OutputStream和Threads。
接下来的尝试是建立一个从L127.0.0.1:1234到192.168.2.1:23(通过网关)的SSH隧道,但是使用这种配置,无法telnet到127.0.0.1:1234(无法以编程方式)也不是手动)。
如何让我的应用程序通过网关使用telnet与机器通信?