Jsch Shell不接受来自Terminal的输入

时间:2015-08-03 14:48:31

标签: java shell groovy ssh terminal

我编写了一个简单的groovy程序,它使用Jsch库建立ssh隧道并在目标服务器上打开shell。脚本连接正常,shell打开。在IntelliJ中,我可以在shell中输入输入,如果我运行程序,则获取后续输出。但是,如果我尝试在终端或cmd中执行相同操作,它连接正常,但我无法输入任何输入,因此无法运行命令。

println "Opening connection to ${sshUser}@${sshHost}:${sshPort}"
Properties config = new Properties()
config.put("StrictHostKeyChecking", "no")
JSch jsch = new JSch()

Session sshSession = jsch.getSession(sshUser, sshHost, sshPort as int)
sshSession.setPassword(sshPass)
sshSession.setConfig(config)
sshSession.connect()
println "Connected"


println "Forwarding connection to ${targetHost}:${targetPort}"
def assignedPort = sshSession.setPortForwardingL(0, targetHost, targetPort as int)
println "Got port $assignedPort"

// Set the session to open as a Shell
Channel channel = targetSession.openChannel("shell")
// Set Input and Output streams
channel.setInputStream(System.in)
channel.setOutputStream(System.out);
// Connect
channel.connect()

更新

进一步阅读后,似乎要让这个工作有一个Windows提示的黑客攻击。然而,JCraft提供的代码存在许多我正在努力解决的问题:

channel.setInputStream(new FilterInputStream(System.in){
      public int read(byte[] b, int off, int len)throws IOException{
        return in.read(b, off, (len>1024?1024:len));
      }
    });

我收到了非常有用的错误"错误的陈述"

1 个答案:

答案 0 :(得分:0)

我最终找到了一个非常简单的解决方案。 Windows Prompt hack确实有效,但需要调整如下:

return System.in.read(b, off, (len>1024?1024:len));

感谢你们的帮助