最近項目要部署10台設備,如果每台設備都手動進行部署想想也是醉了。
因為之前一直使用SecurityFX以及SecurityCRT,所以考慮是否可以使用基於SSH2的類庫來實現文件拷貝以及遠程命令調用。
后來發現了Trilead庫:
jar下載地址:
http://mvnrepository.com/artifact/com.trilead/trilead-ssh2/1.0.0-build221
git源碼地址:
https://github.com/jenkinsci/trilead-ssh2/
看到源碼地址,知道了這是Jekins相關的開源項目。
上代碼:
實現遠程指令執行:
Connection conn = new Connection("10.1.108.35"); try { conn.connect(); } catch (IOException e1) { e1.printStackTrace(); } try { conn.authenticateWithPassword("root", "rootbd"); Session session = conn.openSession(); SFTPv3Client client = new SFTPv3Client(conn); //client.rm("/apps/123/Nero.exe"); session.execCommand("mkdir /apps/123"); InputStream inp = session.getStdout(); InputStreamReader reader = new InputStreamReader(inp); BufferedReader br = new BufferedReader(reader); String line = br.readLine(); System.out.println(line);
這是前半段代碼,主要是實現了遠程執行指令,調用的是session的execCommand;
還可以使用SFTPv3Client(Security FTP)內置的常用函數,ls,rm等來進行常用簡單操作;
下面是后半段代碼,主要是實現了文件上傳功能;
SCPClient scpClient = conn.createSCPClient(); System.out.println("開始拷貝文件..."); scpClient.put("e:\\tmp\\sendFiles\\Nero.exe", "/apps/123/"); System.out.println("拷貝文件完成!"); Vector<SFTPv3DirectoryEntry> files = client.ls("/apps/123"); for(SFTPv3DirectoryEntry item : files){ System.out.println("文件名稱: " + item.filename); } /* SFTPv3FileHandle handle = client.createFile("/apps/123/Nero.exe"); File localFile = new File("e:\\tmp\\sendFiles\\Nero.exe"); FileInputStream fis = new FileInputStream(localFile); byte[] arr = new byte[(int) localFile.length()]; fis.read(arr); fis.close(); client.write(handle, 0, arr, 0, arr.length); client.closeFile(handle); */ client.close(); conn.close(); } catch (IOException e) { e.printStackTrace(); }
這里采用的是SCPClient,熟悉Linux指令的童鞋都知道SCP指令用於遠程拷貝文件,局域網內部100M帶寬可以達到80M/s的傳輸速率,很快;
后面是實踐SFTPClient的ls函數,返回的是SFTPv3DirectoryEntry的Vector(向量,具備自動伸縮功能)對象,獲取遠端的文件列表信息;
最后是一大段的注釋,是通過SFTPv3Client來進行傳輸,可以控制到字節力度,但是傳輸速度太慢;在網絡不好的情況下,想要使用斷點續傳等機制可以采用。
