Java operate file or system between different service – JAVA編程語言程序開發技術文章

設想:能不能在不同服務器之間文件傳輸,或是執行操作系統的命令的方式來操作服務器?
答案:當然可以
 
首先,在這裡介紹一下不用密碼怎麼去訪問別的service。(這是後續操作的基礎)
 
 
要讓 HostB 允許HostA 上的用戶User1 進行操作,需要:
 
1. HostA 上以 User1 登陸,或 su – User1
2. 用ssh-keygen 命令,來生成HostA 的密鑰對文件
 ssh-keygen -t rsa
 生成目錄:/home/User1/.ssh/
 id_rsa 是私鑰文件
 id_rsa.pub 是公鑰文件
3. 修改公鑰文件屬性
 chmod 755 /home/User1/.ssh/id_rsa.pub
4. 將 HostA 上的公鑰內容 id_rsa.pub 添加到 HostB 上 
 如果HostB上沒有  /home/User1/.ssh 目錄或authorized_keys 則需要新建
 將HostA 的 id_rsa.pub 文件內容,添加到 /home/User1/.ssh/authorized_keys 文件中
5. 測試:(註意需要以 User1 登陸)
 scp  1.txt UserB@HostB:/****/xxxx/
 
在不需要密碼的情況下能把1.txt文件從HostA  copy  至HostB,那麼,該配置設置ok。
 
 
其次,網上有很多java實現的ssh,比如jsch等。我們在這裡介紹兩種底層的操作,更加簡明、高效
 
1. Runtime.getRuntime().exec()
 
我想大傢對這個不陌生吧,Runtime這個東西很強大,隻要是你的操作系統能夠完成的,它都能完成。比如linux系統中我們常用的scp命令,跨服務操作
Runtime.getRuntime().exec("scp -r /###/dir  user@HostB:/dir") ;這樣就可以把你的服務器上的文件copy至HostB上。強大吧,當然該功能需要借助於上述說的公鑰文件的配置。至於采用scp來copy file和directory的具體參數就不多說瞭。
 
 
2. ganymed-ssh2-build210.jar包提供瞭很多從方法
(API:http://www.ganymed.ethz.ch/ssh2/javadoc/index-all.html#_R_)它的sess.execCommand(command) ;方法依舊能完成上述scp的功能。
 
這兩者的共同之處在於它們都是在執行操作系統底層的東西,簡潔、高效、非常強大。不僅僅是我在上面介紹的scp的功能,比如刪除目錄以及該目錄下所有的目錄&文件呢?rm -rf /###/drectory ……
 
哈哈,大傢也許看明白瞭,隻要是你的操作系統所能執行的命令,這裡都可以幫你完成,要讓我用一句話評價,那就是:強大!

作者“zzhangyongjie”
 

發佈留言