设想
我在一个 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 和线程作斗争。
下一个尝试是建立一个从 L127.0.0.1:1234 到 192.168.2.1:23(通过网关)的 SSH 隧道,但是使用此配置,无法远程登录到 127.0.0.1:1234(无论是通过编程方式还是手动方式) .
实际问题
如何让我的应用程序使用 telnet 通过网关与机器通信?