java - 如何从java代码将键盘功能键发送到SSH服务器

标签 java ssh ascii jsch outputstream

session 连接后,控制台上会显示一个菜单项。并且该菜单项具有 F1、F2、F3 命令

String host="myhost.abc.123";
String user="devuser";
String password="dev1234";

Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session = null;
ChannelShell channel = null;

session = jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");

channel = (ChannelShell) session.openChannel("shell");
OutputStream out_s = channel.getOutputStream();
channel.connect();

我想发送 F2 - 功能键作为硬编码转义序列或 从键盘到服务器。 尝试了以下选项,但我没有得到下一个响应/输出

/* --- code for printing the menu item on the console/screen ---
MENU ITEMS GET PRINTED ON THE CONSOLE
F1 - ADD   F2 - UPDATE   F3 - DELETE      
*/

//Try 1. F2 - ESC[OQ 
out_s.write("\033[OQ".getBytes()); // may require \n or \r to enter the cmd
out_s.flush();

//Try 2. F2 - ESC[12~ 
out_s.write("\033[12~".getBytes()); // may require \n or \r to enter the cmd
out_s.flush();

//Try 3. F2 - \E[12~ 
out_s.write("\\E[12~".getBytes());
out_s.flush();

//Try 4. F2 - 0x71 
out_s.write((byte)0x71); // may require \n or \r to enter the cmd
out_s.flush();

//Try 5. F2 - \ESC[OQ
out_s.write("\\ESC[OQ".getBytes());
out_s.flush();

最佳答案

这对我有用:

out.write("\u001b[12~".getBytes());
out.flush();

在我测试的服务器上:

read -n 5 key

这会从标准输入中读取 5 个字节,而无需等待返回键。当然,这只是为了测试。您可以在服务器端进行自己的处理。

如何找出特定 key 发送的内容(在 bash 中):

read key

然后键入(例如)F2 键。终端应显示如下内容:

^[[12~

如果没有,试试这个命令来显示发送到终端的字节数:

echo $key | cat -t

在输出中 ^[ 代表(不可打印的)转义字符。其他字符代表它们自己。

关于java - 如何从java代码将键盘功能键发送到SSH服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64501824/

相关文章:

Java,FileNotfound 异常,读取 conn.getInputStream() 时

java - 有没有办法获取带有结果集的 JPA 命名查询的计数大小?

java - 避免apk被破解

Fortran 列表定向输入的 Python 等价物

c++ - ASCII DOS 游戏 - 渲染方法

java - 将 PEM 公钥读入 iOS

docker - 带有ssh的Docker exec没有给出这样的容器错误

powershell - 如何将 "y"传递给使用 PowerShell Start-Process 启动的 pscp 进程?

python-3.x - 通过Shh和Xming的Raspberry Pi Tkinter

java - 替换java中除撇号之外的非字母