我需要使用ProcessBuilder和USERID/PASSWORD組合從JAVA程序產生SSH連接。如何攔截Java程序中的SSH密碼請求
我已經使用Ganymed,JSch,JAVA Processbuilder和Expect腳本(Expect4J),JAVA ProcessBuilder和SSHPASS腳本和SSH共享密鑰的組合成功實現了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",
"[email protected]",
"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
[email protected]'s password:
後,我輸入密碼,我得到了休息
Jennifer Lawrence
[memphis BuilderTest]#
同樣,具體的問題是:輸出 有沒有辦法產卵的外耳炎l使用PasswordAuthentication方法(無法使用其他方法)使用JAVA ProcessBuilder接口(不能使用其他語言)的ssh客戶端(OpenSSH,Tectia SSH,SecureCRT等),攔截/捕獲密碼提示並響應/密碼從我的JAVA代碼(所以用戶不需要輸入它)?
你爲什麼以各種不同的方式來實現它? –
我的團隊創建基於JAVA的工具供基礎架構團隊使用,每個團隊都有自己的做事方式(這是一家全球性的公司),我們不能通過強制標準或模式來限制事物。 –
那麼有一個原因,爲什麼密碼提示完成的方式不能被攔截。原因在於程序或腳本中的硬編碼密碼是不受歡迎的,至少可以說。 – Ingo