在java裏能夠經過Ganymed SSH-2, Expect4j等實現ssh登陸,因爲Ganymed SSH-2是純java實現,而且能夠實現scp,sftp等,所以咱們採用Ganymed SSH-2 html
1> 下載安裝 java
從http://code.google.com/p/ganymed-ssh-2/下載,咱們用的是ganymed-ssh2-build251beta1.zip。 shell
在eclipse裏新建一個測試工程,並將解壓後的ganymed-ssh2-build251beta1.jar拷到工程的lib目錄下,而後在工程屬性的java build path裏添加這個jar的library。 windows
2> ssh session
將解壓後的examples目錄下的Basic.java 拷到工程的src目錄,編譯運行之後能夠在控制檯看到輸出結果。除了執行一條命令,也能夠執行一個shell腳本。 eclipse
例如將Basic.java中的「uname -a && date && uptime && who」 改成「/home/lss/test.sh」, test.sh的內容以下: ssh
#! /bin/sh
echo "testing shell";
ls;
在eclipse裏運行之後的結果爲: 測試
Here is some information about the remote host:
testing shell
1
test.sh
ExitCode: 0 ui
須要注意的是在一個session裏只能執行一次命令,所以若是想在server上執行多個命令,要麼打開多個session,要麼在一個session裏去執行一個shell腳本,shell腳本里去執行多個命令。 google
每次執行完之後,若是正確將返回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