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

标签 java batch-file ssh password-protection

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

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

我的一位同事设法使用“sendkey”方法在 VB 脚本上完成此操作。在线信息指出“sendkey”将一个或多个击键发送到 Activity 窗口,就像在键盘上键入一样。我可以知道 JSCH 或 SSHJ 中是否有 Java 中 sendkey 的对应项?

注意:我不想要直接连接到终端,我想要的是自动化交互式登录,就像我手动输入它一样,就像 sendkey 所做的那样。

最佳答案

将键入的字符注入(inject) ssh session 非常简单。只需将要写入的字符注入(inject)到 sshj 提供的 OutputStream 中即可。我假设您登录然后执行需要交互式控制台登录的操作。

我使用以下名为 test.sh 的简单脚本来模拟执行的过程。它读取键入的行并打印它。

#/bin/bash
read varname
echo You typed $varname

我正在使用 sshj 中修改后的 Exec example 执行此脚本:

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 代码执行脚本,您将得到结果

You typed 1234567

通过逐行读取 inputStream,您可以等待询问用户名或密码的行,并将正确的数据发送到服务器,模拟您的输入。

关于用于 SSH 辅助登录验证的 Java API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43145390/

相关文章:

ssh - 通过网关的光纤网络连接不起作用

linux - 用于远程访问的 ssh-keygen 不起作用

java - Windows 上的 DOCKER_HOST 环境变量

java - 如何将当前 UTC 时间上传到解析日期列?

batch-file - 如果与 ipcam 的连接丢失,则关闭 FFMPEG

windows - 在 Windows 命令行中使用批处理文件中的参数

java - Android 中只有月份和年份的微调器

java - iReport 2.0.4 - UnsupportedOperationException

batch-file - 批处理文件执行启动、运行、%TEMP% 和删除所有

ssh - 通过 ssh 转发 SIGTERM