天天看點

java代碼如何連接配接Linux虛拟機,還有檔案上傳下載下傳,等基礎指令

上一篇,基于Hutool包對資料庫的增删改查操作

這裡基于Hutool包下封裝的工具類,對Linux連接配接,還有基本指令操作示範

一、工具包代碼示例

此處是源代碼的一部分,,​​完整代碼在Github上​​

/**
 * Jsch工具類<br>
 * Jsch是Java Secure Channel的縮寫。JSch是一個SSH2的純Java實作。<br>
 * 它允許你連接配接到一個SSH伺服器,并且可以使用端口轉發,X11轉發,檔案傳輸等。<br>
 */
public class JschUtil {
  /** 不使用SSH的值 */
  public final static String SSH_NONE = "none";
  /** 本地端口生成器 */
  private static final LocalPortGenerater portGenerater = new LocalPortGenerater(10000);
  /**
   * 生成一個本地端口,用于遠端端口映射
   * @return 未被使用的本地端口
   */
  public static int generateLocalPort() {
    return portGenerater.generate();
  }
  /**
   * 獲得一個SSH會話,重用已經使用的會話
   * @param sshHost 主機
   * @param sshPort 端口
   * @param sshUser 使用者名
   * @param sshPass 密碼
   * @return SSH會話
   */
  public static Session getSession(String sshHost, int sshPort, String sshUser, String sshPass) {
    return JschSessionPool.INSTANCE.getSession(sshHost, sshPort, sshUser, sshPass);
  }
  /**
   * 打開一個新的SSH會話
   * 
   * @param sshHost 主機
   * @param sshPort 端口
   * @param sshUser 使用者名
   * @param sshPass 密碼
   * @return SSH會話
   */
  public static Session openSession(String sshHost, int sshPort, String sshUser, String sshPass) {
    final Session session = createSession(sshHost, sshPort, sshUser, sshPass);
    try {
      session.connect();
    } catch (JSchException e) {
      throw new JschRuntimeException(e);
    }
    return session;
  }
  /**
   * 建立一個新的SSH會話
   * 
   * @param sshHost 主機
   * @param sshPort 端口
   * @param sshUser 機使用者名
   * @param sshPass 密碼
   * @return SSH會話
   * @since 4.5.2
   */
  public static Session createSession(String sshHost, int sshPort, String sshUser, String sshPass) {
    if (StrUtil.isEmpty(sshHost) || sshPort < 0 || StrUtil.isEmpty(sshUser) || StrUtil.isEmpty(sshPass)) {
      return null;
    }

    Session session;
    try {
      session = new JSch().getSession(sshUser, sshHost, sshPort);
      session.setPassword(sshPass);
      // 設定第一次登陸的時候提示,可選值:(ask | yes | no)
      session.setConfig("StrictHostKeyChecking", "no");
    } catch (JSchException e) {
      throw new JschRuntimeException(e);
    }
    return session;
  }
}      

二、Java測試連接配接,操作代碼

2.1 建立連接配接

public class JschUtilTest {
  
  @Test
  @Ignore
  public void bindPortTest() {
    //建立會話,此會話用于ssh連接配接到跳闆機(堡壘機),此處為xx.xx.xx.xx(IP)
    Session session = JschUtil.getSession("xx.xx.xx.xx", 22, "xxx", "xxx"); // 這裡的IP,端口,使用者名和密碼需要自己指定
    System.out.println(session.getUserName());
    System.out.println(session.getPort());
  }
}      

運作測試,就會在控制台列印使用者名和端口資訊,說明已經成功建立連接配接了

2.1 ls 檢視目錄操作

代碼示例

@Test
  @Ignore
  public void sftpTest() {
    Session session = JschUtil.getSession("xxxx.xx.xx.xx", 22, "username", "password");
    Sftp sftp = JschUtil.createSftp(session);
    List<String> ls = sftp.ls("/opt");
    ls.forEach(System.out::println);
  }      

2.2 删除指令

@Test
  @Ignore
  public void sftpTest2() {
    Session session = JschUtil.getSession("xxxx.xx.xx.xx", 22, "username", "password");
    Sftp sftp = JschUtil.createSftp(session);
    boolean b = sftp.delDir("/opt/test/test");
    System.out.println(b);
  }      

2.3 建立檔案夾

@Test
  @Ignore
  public void sftpTest3() {
    Session session = JschUtil.getSession("xxxx.xx.xx.xx", 22, "username", "password");
    Sftp sftp = JschUtil.createSftp(session);
    boolean b = sftp.mkdir("/opt/test/test2");
    System.out.println(b);
  }      

2.4 檔案上傳( Windows --> Linux )

@Test
  @Ignore
  public void sftpTest4() {
    Session session = JschUtil.getSession("xxxx.xx.xx.xx", 22, "username", "password");
    Sftp sftp = JschUtil.createSftp(session);
    Sftp put = sftp.put("D:\\tmp\\a.txt", "/opt/test/as.txt");
  }      

2.4 檔案下載下傳

@Test
  @Ignore
  public void sftpTest5() {
    Session session = JschUtil.getSession("xxxx.xx.xx.xx", 22, "username", "password");
    Sftp sftp = JschUtil.createSftp(session);
sftp.download("/opt/test/as.txt", FileUtil.file("D:\\tmp\\b.txt"));
  }