您的
ping source x.x.x.x host y.y.y.y语法对我来说似乎很奇怪。但我相信您,它可以在终端上正常工作。
该ping命令可能取决于某些环境变量或其他配置来解析源地址。
JSch中的“ exec”通道(正确地)没有为会话分配伪终端(PTY)。结果,(可能)获得了一组不同的启动脚本。基于TERM环境变量的存在/不存在,使用脚本中的和/或不同分支。因此,环境可能不同于您与SSH客户端一起使用的交互式会话。
如果这使
ping命令中断,则很明显是服务器端配置错误,而不是JSch故障。该ping命令不是交互式命令,因此即使在非交互式会话上也应起作用。您应该找出破坏的原因,ping并相应地修复启动脚本。
要验证这是根本原因,请在SSH客户端中禁用伪终端分配。例如在PuTTY中,它是
Connection> SSH> TTY>不要分配伪终端。然后转到“连接”>“ SSH”>“远程”命令并输入您的ping source …命令。检查会话>退出时关闭窗口>从不,然后打开会话。
另一种(不推荐)的方法是使用以下.setPty方法强制为“ exec”通道分配伪终端:
Channel channel=session.openChannel("exec");((ChannelExec)channel).setPty(true);


