Java程序調用ssh, scp, sftp

jopen 11年前發布 | 70K 次閱讀 Java Java開發

在java里可以通過Ganymed SSH-2, Expect4j等實現ssh登錄,由于Ganymed SSH-2是純java實現,并且可以實現scp,sftp等,因此我們采用Ganymed SSH-2

1> 下載安裝

從http://code.google.com/p/ganymed-ssh-2/下載,我們用的是ganymed-ssh2-build251beta1.zip。

在eclipse里新建一個測試工程,并將解壓后的ganymed-ssh2-build251beta1.jar拷到工程的lib目錄下,然后在工程屬性的java build path里添加這個jar的library。

2> ssh

將解壓后的examples目錄下的Basic.java 拷到工程的src目錄,編譯運行以后可以在控制臺看到輸出結果。除了執行一條命令,也可以執行一個shell腳本。

例如將Basic.java中的“uname -a && date && uptime && who” 改為“/home/lss/test.sh”, test.sh的內容如下:

#! /bin/sh
echo "testing shell";
ls;

在eclipse里運行以后的結果為:

Here is some information about the remote host:
testing shell
1
test.sh
ExitCode: 0


需要注意的是在一個session里只能執行一次命令,因此如果想在server上執行多個命令,要么打開多個session,要么在一個session里去執行一個shell腳本,shell腳本里去執行多個命令。


每次執行完以后,如果正確將返回ExitCode: 0,因此程序里可以通過sess.getExitStatus()來判斷命令是否被正確執行。


3> scp

首先在程序里import ch.ethz.ssh2.SCPClient;   

然后通過下面的方法來實現:

SCPClient scpClient = conn.createSCPClient();  
scpClient.put("localFiles", "remoteDirectory"); //從本地復制文件到遠程目錄  
scpClient.get("remoteFiles","localDirectory"); //從遠程獲取文件   

例如:

scpClient.put("D:\\localTest.txt", "/home/bill/"); 需要注意的是windows的本地目錄要用雙斜杠來分隔目錄。

scpClient.put("/home/bill/remoteTest.txt", "D:\\");

4> sftp

首先在程序里import ch.ethz.ssh2.SFTPv3Client;

SFTPv3Client sftpClient = new SFTPv3Client(conn);  
sftpClient.mkdir("newRemoteDir", 0755); //遠程新建目錄 ,第二個參數是創建的文件夾的讀寫權限 
sftpClient.rmdir("oldRemoteDir"); //遠程刪除目錄    
另外還有創建刪除文件,讀寫文件等接口,參見http://www.ganymed.ethz.ch/ssh2/javadoc/ch/ethz/ssh2/SFTPv3Client.html

原文地址:http://blog.csdn.net/sundongsdu/article/details/7284439

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!