用于SSH辅助登录验证的Java API

用于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

目前,当我从windows连接到linux主机服务器时,我使用putty和.bat文件中的凭据自动访问机器。但是,连接不会自动将我指向终端外壳,但是有一个辅助的交互式登录提示,要求我手动输入另一个用户名和密码,到目前为止,我不知道如何通过自动化来传递这些用户名和密码

我的问题是,是否可以专门在java上或仅在.bat上自动执行这些操作

我的一个同事使用“sendkey”方法在VB脚本上实现了这一点。信息在线状态“sendkey”向活动窗口发送一个或多个击键,就像在键盘上键入一样。我可以知道JSCH或SSHJ中是否有Java中sendkey的对应项吗


注意:我不想直接连接到终端,我想要的是自动进行交互式登录,就像我手动键入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,您可以等待请求用户名或密码的行,并模拟您的输入将正确的数据发送到服务器