github: https://github.com/wengyingjian/ssh-java-demo.git
這次找到了一套新的api,叫jsch。網上查了一下,順便把官網的幾個demo給一通拿過來了(還看到了sftp,看來到時候文件傳輸也可以用這個寫)。
一。測試與修改代碼
運行了給的代碼以后發現時帶圖形化的,果斷刪去不相干的代碼,看上去果然清楚多了。
然后調用了一下,發現返回的結果也方便:每次服務器給出啥反應就得到啥字符串,這下字符串切割要方便一些了。
關鍵是在打印信息的時候我看到了個“while true” ,試了一下,果然能夠保證程序不退出,持續輸出,這就是我想要的。
但是也發現了不足:每次只能運行一條命令。
這一些東西是前兩天在機場寫的,不知道為啥ssh連接很慢,所以執行多條語句的時候等的超級蛋疼。。
二。對代碼的改造
將原先的代碼改了一通,變成自己的工具類,基本功能得以實現。
三。整個功能的合並
回到最初的目的,是要做4件事:
0).ssh user@host
password
1).netstat -anp|grep 8080
2).kill pid
3).$CATALINA_HOME/bin/startup.sh
4).tail -f $CATALINA_HOME/logs/catalina.out
其中1和2之間是要得到返回結果,在java中分析到底第二步要kill的pid是多少的。
所以執行順序應該是:1->2,3,4
但是現在支持連續多條命令的不支持輸出日志,支持輸出日志的不能執行多條語句,所以只能是1->2,3->4
補一句:log4j未調通,所以使用system.out顯得有點low了。。
四。其它的思考
既然沒有找到我特別滿意的javaAPI,我是不是可以把ssh協議看作是http協議(先不管加密認證的事),通過socket編程來自己實現一個ssh的客戶端。
這么一想,如果不用ssh協議呢?的確,用啥都行,甚至自己用java隨便在服務器上來個端口,客戶端與其通信,這樣理論上也是行得通的。也能找到同樣在運用中的例子:cargo以及tomcat插件的自動化部署,走的就是http協議,然后通過tomcat的manager來認證。然而,tomcat關閉了就用不了了。
所以,為什么要用ssh,(拋開安全的問題)就是因為ssh-server幾乎已經成了linux服務器的標配,所以我們才使用的。
至於用java來自己寫一個ssh客戶端,我會先把畢業設計其它的部分先完成,然后再用剩余的時間去嘗試自己實現。