2017-03-31 91 views
1

當前,當我從Windows連接到我們的Linux主機服務器時,我使用putty和我的憑證在.bat文件中自動訪問機器。然而,連接並不會自動將我引導到終端外殼,但有一個輔助交互式登錄提示,它要求我手動輸入另一個用戶名和密碼,至此我不知道如何通過自動化來傳遞這些內容。用於SSH輔助登錄驗證的Java API

我的問題,是否可以自動化這些具體的Java或只是一個.bat?

我的一位同事設法使用「sendkey」方法在VB腳本上執行此操作。在線信息顯示「sendkey」發送一個或多個按鍵到活動窗口,就好像它們在鍵盤上鍵入一樣。我可以知道在JSCH或SSHJ中是否有與Java中的sendkey相對應的東西?

注意:我不是直接連接到終端後,我所追求的是自動化交互式登錄,就好像我手動鍵入它,就像sendkey所做的一樣。

回答

1

將輸入的字符輸入到ssh會話中非常簡單。只需將要寫入的字符注入由sshj提供的OutputStream即可。我假設你登錄然後執行一些需要交互式控制檯登錄的東西。

我使用以下簡單腳本test.sh來模擬執行的過程。它讀取一個輸入的行並打印出來。

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

我使用的是修改Exec example從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行你可以等待輸入用戶名或密碼的行,並將正確的數據發送到服務器,模擬你的輸入。