JSch创建一个嵌入式ssh连接,但ServerAliveInterval不起作用

时间:2017-11-05 15:14:53

标签: java shell ssh jsch

我想使用JSch作为常见的shell交互式工具,它非常有用。

我想创建一个ssh,它是内部JSch通道shell,而shell的InputStream和OutStream是由我自己维护的。

问题是当我向ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=2 -o StrictHostKeyChecking=no -o ConnectTimeout=10 -T root@xxx.xxx.xxx.xxx -p 22发送一个命令字符串OutputStream以设置ServerAliveInterval的保持生命时,但它根本不起作用。新频道将保持1我关闭网络时的最小值。这个时间超过我的配置ServerAliveInterval=5 ServerAliveCountMax=2

JSch是否支持内部ssh连接设置来处理保持活动检查,例如ServerAliveInterval

更新

描述问题的一些步骤:
1.创建一个shell通道使用JSch登录host1
2.通过发送一个字节流host2命令,将通道跳转到ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=2 root@xxx.xxx.xxx.xxx -p 22。新的ssh配置为ServerAliveInterval以检查host2的ssh网络状态。

如果我使用host1方法并使用Session.setServerAliveInterval进行测试,则JSch可以识别Session.isConnected是否断开连接。
如果只有host2网络中断,即使我跳转到host2时使用ServerAliveInterval配置,也无法检查host2是否会出现问题。持续很长时间(在我的测试中超过1分钟)直到获得packet_write_wait: Connection to xxx.xxx.xxx.xxx port 22: Broken pipe。但是我预计在设置ServerAliveInterval=5 ServerAliveCountMax=2时,一些错误消息会在10秒内到达。

1 个答案:

答案 0 :(得分:0)

shell是JSCh的黑盒子。

JSch并不知道你在那里做过什么。

如果您想模拟OpenSSH ServerAliveInterval指令的作用,请使用Session.setServerAliveInterval

另见JSch: How to keep the session alive and up