Trilead,SSH2的Java調用


  最近項目要部署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來進行傳輸,可以控制到字節力度,但是傳輸速度太慢;在網絡不好的情況下,想要使用斷點續傳等機制可以采用。

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM