java - 如何在 Java 程序中拦截 SSH 密码请求

标签 java ssh passwords tty

我需要使用 ProcessBuilder 和 USERID/PASSWORD 组合从 JAVA 程序生成 SSH 连接。

我已经使用 Ganymed、JSch、JAVA Processbuilder 和 Expect 脚本(还有 Expect4J)、JAVA ProcessBuilder 和 SSHPASS 脚本以及 SSH 共享 key 成功实现了 SSH 连接。

目前安全性不是问题,我所追求的是能够以编程方式支持 SSH 连接的各种组合。

我的问题是 SSH 抛出的密码提示不在 STDIN/STDOUT 上(我相信在 tty 上)。这是我要克服的最后一个障碍。

我的问题是有没有办法拦截 SSH 密码请求并从我的 JAVA 代码中提供它?

请注意,这是一个非常狭窄的问题(以上所有信息都是为​​了保证答案不会太宽泛)。

这是我正在尝试的示例代码:

import  java.io.*;
import  java.util.*;

public class ProcessBuilderTest {
    public  static void main(String[] args) throws IOException, Exception {

        ProcessBuilder pb = new ProcessBuilder(
                                "/usr/bin/ssh",
                                "nyuser@myserver.com",
                                "export NOME='Jennifer Lawrence'; echo $NOME"
                                );


        pb.redirectErrorStream(); //redirect stderr to stdout
        Process process = pb.start();
        InputStream inputStream = process.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String line = null;
        while((line = reader.readLine())!= null) {
            System.out.println(line);
        }
        process.waitFor();
     }
}

但是,当我运行它时,我得到了这个:

[memphis BuilderTest]# java ProcessBuilderTest

myuser@myserver's password: 

输入密码后,我得到了剩余的输出:

Jennifer Lawrence

[memphis BuilderTest]# 

同样,具体问题是: 有没有办法使用 PasswordAuthentication 方法(不能使用其他方法)生成外部 ssh 客户端(OpenSSH、Tectia SSH、SecureCRT 等)使用 JAVA ProcessBuilder 接口(interface)(不能使用其他语言)的过程,拦截/捕获密码从我的 JAVA 代码中提供密码提示和响应/交互(这样用户就不需要输入密码)?

最佳答案

假设您在 Linux 上运行,您需要了解伪 ttys。密码提示在 tty 设备上。您将需要构建一个针对伪 tty 运行的单独进程,而不是仅仅继承您的 tty 设备,然后您可以拦截密码提示。

这是一个中等复杂的过程。

有一个库支持其中的一些:http://www.ganymed.ethz.ch/ssh2/FAQ.html .如果它可用,您可能会发现阅读它的源代码很有启发性。

关于java - 如何在 Java 程序中拦截 SSH 密码请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20727724/

相关文章:

java - 跟随 google "I' m feeling lucky"使用 httpURLConnection 重定向

mysql - 如何将远程mysql数据库克隆到本地开发机器?

django - 如何加密为Django默认的pbkdf2_sha256加密方式?

jquery - <input type ="password"...> jQuery 样式

java - 带有 MATCH_PARENT 的 RelativeLayout 不起作用

java - felix exthttpservice 设置 cookie 的 session 路径

ubuntu - 无法使用 Ubuntu 16.04 登录到 Dockerized SSH 守护程序服务

java - HTMLUnit 密码设置问题

JavaFX 自定义字体

ssh - jenkins ssh 代理转发