2013-12-22 27 views
1

我需要使用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代碼(所以用戶不需要輸入它)?

+1

你爲什麼以各種不同的方式來實現它? –

+0

我的團隊創建基於JAVA的工具供基礎架構團隊使用,每個團隊都有自己的做事方式(這是一家全球性的公司),我們不能通過強制標準或模式來限制事物。 –

+0

那麼有一個原因,爲什麼密碼提示完成的方式不能被攔截。原因在於程序或腳本中的硬編碼密碼是不受歡迎的,至少可以說。 – Ingo

回答

0

假設您在Linux上運行,您需要了解僞ttys。密碼提示在tty設備上。您將需要構建一個單獨的進程來運行僞tty,而不是繼承您的tty設備,然後您可以攔截密碼提示。

這是一個適度複雜的過程。

有一個庫支持這個:http://www.ganymed.ethz.ch/ssh2/FAQ.html。您可能會發現閱讀其來源照明,如果它可用。

+0

這就是我的想法,在這種情況下,我的問題是: 1.如何在JAVA中分配一個pty(在Linux和Windows上都更糟糕) 2。如何針對該pty分配啓動ssh客戶端。 我已經搜索了iNet l;爲這個答案(例如一些示例代碼)和所見到的所有我見過的人都是相當新鮮的人問這個非常相同的問題。 :( –

+0

Windows沒有'pty的意思,我沒有建議爲Windows提供 – bmargulies

+0

首先感謝您的回覆。Ganymed是我在我的代碼中使用的純JAVA SSH實現之一。我將要看看它的來源。 –