Я написал простую программу groovy, которая использует Jsch Library для создания туннеля ssh и открытия оболочки на целевом сервере. Сценарий прекрасно соединяется и открывается оболочка. В IntelliJ я могу ввести ввод в оболочку и получить последующий вывод, если я запустил программу. Однако, если я попытаюсь сделать то же самое в терминале или в cmd, он подключится нормально, но я не могу ввести какой-либо вход, поэтому не могу запускать команды.Jsch Shell не принимает ввод от терминала
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()
UPDATE
После дальнейшего чтения, кажется, чтобы получить эту работу есть хак для строки 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));
}
});
я получаю очень полезную ошибку «соврет»
Я предполагаю, что вы хотите сделать это в отдельном потоке –
Да вот что я надеялся, to – joey7492
Попробуйте вызвать 'channel.setPty (true)' перед вызовом 'connect()'. Вы можете открыть необработанную трубу в удаленной системе, которая не реагирует на нажатия клавиш так, как вы ожидаете. Если это не поможет, пожалуйста, подробно опишите, как вы тестируете подключение к удаленной системе. – Kenster