JSch 是SSH2的一個純Java實現。它允許你連接到一個sshd 服務器,使用端口轉發,X11轉發,文件傳輸等等。你可以將它的功能集成到你自己的 程序中。同時該項目也提供一個J2ME版本用來在手機上直連SSHD服務器。
官網:http://www.jcraft.com/jsch/中有很多例子http://www.jcraft.com/jsch/examples/,這裏先採用(已做修改)其中2個來進行簡單論述,希望對大家有所幫助。
本文采用的jsch版本是0.1.51. 下載地址:http://sourceforge.net/projects/jsch/files/jsch/0.1.54/jsch-0.1.54.zip/download。
本文采用的Linux操作系統是CentOS6.5.
TIPS: 查看Linux操作系統(內核)版本可以使用:uname -a; uname -r; cat /etc/issue; cat /etc/redhat-release等命令。
第一個例子:採用Java模擬shell操作。
這裏涉及到幾個參數,會在下面的代碼中有所體現:
- USER:所連接的Linux主機登錄時的用戶名
- PASSWORD:登錄密碼
- HOST:主機地址
- DEFAULT_SSH_PROT=端口號,默認爲22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
|
運行結果:
1 2 3 4 5 6 |
|
輸入ls查看:
1 2 3 4 5 6 7 |
|
這樣就和在原linux系統中一樣使用shell功能了。
如果需要跳過如下的檢測:
1 2 3 |
|
只需要在程序中加入相應的代碼:
1 |
|
運行結果:
1 2 |
|
第二個例子:運行一條shell指令,這裏就那“ls”做例子好了。
No more talk, show you the code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
|
運行結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
第二個例子相比於第一個例子來說將UserInfo採用static class的方式提取出來,這樣更直觀一點。
JSch是以多線程方式一下,所以代碼在connect後如果不disconnect channel和session,以及相關stream, 程序會一直等待,直到關閉。
需要注意的一個問題,相關的Stream和Channel是一定要關閉的,那麼應該在什麼時候來關?執行connect後,JSch接受客戶端結果需要一定的時間(以秒計),如果馬上關閉session就會發現什麼都沒接受到或內容不全。
還有一點注意,使用shell時,看到執行後沒有結果,解決辦法是在命令行後加上”\n”字符,server端就認爲是一條完整的命令了。
最後將第一個和第二個例子合併,並提取一些公用模塊,以便更好的理解和使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
|
測試代碼:
1 2 3 4 5 6 7 8 9 |
|
測試結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
還有解釋查看一下左邊是否有個shell.txt以及shell.txt是否有相應的內容。