我想使用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秒内到达。
答案 0 :(得分:0)
shell是JSCh的黑盒子。
JSch并不知道你在那里做过什么。
如果您想模拟OpenSSH ServerAliveInterval
指令的作用,请使用Session.setServerAliveInterval
。