用于SSH辅助登录验证的Java API
目前,当我从windows连接到linux主机服务器时,我使用putty和.bat文件中的凭据自动访问机器。但是,连接不会自动将我指向终端外壳,但是有一个辅助的交互式登录提示,要求我手动输入另一个用户名和密码,到目前为止,我不知道如何通过自动化来传递这些用户名和密码 我的问题是,是否可以专门在java上或仅在.bat上自动执行这些操作 我的一个同事使用“sendkey”方法在VB脚本上实现了这一点。信息在线状态“sendkey”向活动窗口发送一个或多个击键,就像在键盘上键入一样。我可以知道JSCH或SSHJ中是否有Java中sendkey的对应项吗用于SSH辅助登录验证的Java API,java,batch-file,ssh,password-protection,Java,Batch File,Ssh,Password Protection,目前,当我从windows连接到linux主机服务器时,我使用putty和.bat文件中的凭据自动访问机器。但是,连接不会自动将我指向终端外壳,但是有一个辅助的交互式登录提示,要求我手动输入另一个用户名和密码,到目前为止,我不知道如何通过自动化来传递这些用户名和密码 我的问题是,是否可以专门在java上或仅在.bat上自动执行这些操作 我的一个同事使用“sendkey”方法在VB脚本上实现了这一点。信息在线状态“sendkey”向活动窗口发送一个或多个击键,就像在键盘上键入一样。我可以知道JSC
注意:我不想直接连接到终端,我想要的是自动进行交互式登录,就像我手动键入sendkey一样。将键入的字符注入ssh会话非常简单。只需将要写入的字符注入sshj提供的
OutputStream
。我假设您登录并执行一些需要交互式控制台登录的操作
我使用以下名为test.sh
的简单脚本模拟执行的过程。它读一行打印出来
#/bin/bash
read varname
echo You typed $varname
我正在使用从sshj修改的脚本执行此脚本:
final Session session = ssh.startSession();
try {
Command cmd = session.exec("/home/username/test.sh");
OutputStream out = cmd.getOutputStream();
out.write("1234567\n".getBytes()); // we type 1234567
out.flush();
System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
cmd.join(5, TimeUnit.SECONDS);
System.out.println("\n** exit status: " + cmd.getExitStatus());
} finally {
session.close();
}
如果使用sshj代码执行脚本,您将得到结果
你打了1234567
通过逐行读取inputStream,您可以等待请求用户名或密码的行,并模拟您的输入将正确的数据发送到服务器