Java JSch-Esc命令和编码
我正在编写一个应用程序,通过SSH连接到服务器,打开一个应用程序(它在shell上运行)并使用它。我正在使用JSch,我已经成功地连接、打开应用程序并向其发送命令。现在我面临两个问题:Java JSch-Esc命令和编码,java,linux,ssh,jsch,Java,Linux,Ssh,Jsch,我正在编写一个应用程序,通过SSH连接到服务器,打开一个应用程序(它在shell上运行)并使用它。我正在使用JSch,我已经成功地连接、打开应用程序并向其发送命令。现在我面临两个问题: 在Windows上,我的应用程序有编码问题(在Linux上,如果我使用IDE控制台输出来运行它,我也有同样的问题,它只显示在bash上)。这是一个尖叫声:这是它应该显示的屏幕截图: 我正在运行的应用程序使用ESC键,我无法在我编写的应用程序中使用它。它只是在输出上写入^[ 下面是我用于执行此应用程序的代码: JS
^[
下面是我用于执行此应用程序的代码:
JSch shell = new JSch();
Session session = shell.getSession("myUser", "myHost");
session.setPassword("myPassword");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
Channel channel = session.openChannel("shell");
channel.setOutputStream(System.out);
PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream(in);
channel.setInputStream(in);
channel.connect();
out.write("my_application\n".getBytes());
Thread.sleep(1000); //waiting for the app to load
out.write("\n".getBytes());
out.write("appUser\n".getBytes());
out.write("appPassword\n".getBytes());
channel.setInputStream(System.in);
PS:服务器使用sh而不是bash。对于第一个问题,这些是ANSI转义码。当您创建Jsch shell会话时,默认情况下将分配一个伪终端-这将导致发送这些序列。您可以禁用伪终端:
((ChannelShell)channel.setPty(false);
有关更多信息,请参阅
关于你的第二个问题,问题是在Windows Java的
系统上。in
是缓冲的,不允许你轻松地中继escape键。你应该能够读取文本行并将它们发送到远程应用程序。更多信息,你将不得不求助于本机代码来获得实际的按键操作。有关更多信息,请参阅我们将详细介绍如何在不同的操作系统上执行此操作。我认为windows无法呈现颜色可能存在问题谢谢。我已经设法解决了第一个问题。我决定使用另一种方法解决我的问题,因为我有一些无法用ssh客户端解决的需求。我接受你的答案。