上一篇,基于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"));
}