Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSch-Esc命令和编码_Java_Linux_Ssh_Jsch - Fatal编程技术网

Java JSch-Esc命令和编码

Java JSch-Esc命令和编码,java,linux,ssh,jsch,Java,Linux,Ssh,Jsch,我正在编写一个应用程序,通过SSH连接到服务器,打开一个应用程序(它在shell上运行)并使用它。我正在使用JSch,我已经成功地连接、打开应用程序并向其发送命令。现在我面临两个问题: 在Windows上,我的应用程序有编码问题(在Linux上,如果我使用IDE控制台输出来运行它,我也有同样的问题,它只显示在bash上)。这是一个尖叫声:这是它应该显示的屏幕截图: 我正在运行的应用程序使用ESC键,我无法在我编写的应用程序中使用它。它只是在输出上写入^[ 下面是我用于执行此应用程序的代码: JS

我正在编写一个应用程序,通过SSH连接到服务器,打开一个应用程序(它在shell上运行)并使用它。我正在使用JSch,我已经成功地连接、打开应用程序并向其发送命令。现在我面临两个问题:

  • 在Windows上,我的应用程序有编码问题(在Linux上,如果我使用IDE控制台输出来运行它,我也有同样的问题,它只显示在bash上)。这是一个尖叫声:这是它应该显示的屏幕截图:
  • 我正在运行的应用程序使用ESC键,我无法在我编写的应用程序中使用它。它只是在输出上写入
    ^[
    下面是我用于执行此应用程序的代码:

    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客户端解决的需求。我接受你的答案。