我需要通过 SSH 堡垒/跳转服务器连接到远程 JMX 服务器。我可以成功使用 Linux ssh 客户端来实现所需的结果,也可以使用通过 WinSCP(在 Windows 上)动态启动的 PuTTY 会话打开动态的(重要!)端口转发隧道,但我真的很难消除 Windows 上的这个 WinSCP 依赖。
Linux 上(的工作)步骤简单如下:
- 首先打开一个新隧道
ssh -fN -D $LOCAL_PORT user@host
(其中主机在 ~/.ssh/config 中配置为使用带有私钥的堡垒/跳转服务器) - 运行客户端程序(控制台连接到远程 JMX 服务器)
./jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=$LOCAL_PORT service:jmx:rmi:///jndi/rmi://localhost:$TARGET_PORT/jmxrmi -J-DsocksNonProxyHosts=
在 Windows 上使用 WinSCP 和 PuTTY 稍微复杂的步骤是:
- 打开 WinSCP 并使用高级设置创建与目标主机的新连接,以通过堡垒/跳转主机建立隧道(使用私钥或 Pageant)
- 使用内置的 WinSCP 选项启动新的 PuTTY 会话(通过隧道)
- 编辑新的 PuTTY 会话的设置以创建本地动态转发端口
- 使用 jconsole 打开连接
jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=$TUNNELPORT service:jmx:rmi:///jndi/rmi://localhost:$TARGETPORT/jmxrmi -J-DsocksNonProxyHosts=
我希望实现的是消除对 WinSCP 的任何依赖,只使用 PuTTY 来创建/使用端口转发隧道。我尝试编辑“SSH 远程命令”选项以添加 -D 选项,并在成功手动打开远程隧道会话后编辑设置,但无济于事。请问您知道我做错了什么吗?
[编辑] 根据 Martin Prikryl 的建议,该问题已从 Stack Overflow 移至超级用户