mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
JschUtil新增一个重载方法以支持私钥以byte数组形式载入
This commit is contained in:
@@ -60,6 +60,22 @@ public enum JschSessionPool {
|
||||
return this.cache.get(key, Session::isConnected, ()->JschUtil.openSession(sshHost, sshPort, sshUser, prvkey, passphrase));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得一个SSH跳板机会话,重用已经使用的会话
|
||||
*
|
||||
* @param sshHost 跳板机主机
|
||||
* @param sshPort 跳板机端口
|
||||
* @param sshUser 跳板机用户名
|
||||
* @param prvkey 跳板机私钥内容
|
||||
* @param passphrase 跳板机私钥密码
|
||||
* @return SSH会话
|
||||
* @since 5.8.18
|
||||
*/
|
||||
public Session getSession(String sshHost, int sshPort, String sshUser, byte[] prvkey, byte[] passphrase) {
|
||||
final String key = StrUtil.format("{}@{}:{}", sshUser, sshHost, sshPort);
|
||||
return this.cache.get(key, Session::isConnected, ()->JschUtil.openSession(sshHost, sshPort, sshUser, prvkey, passphrase));
|
||||
}
|
||||
|
||||
/**
|
||||
* 加入Session
|
||||
*
|
||||
|
@@ -69,6 +69,21 @@ public class JschUtil {
|
||||
return JschSessionPool.INSTANCE.getSession(sshHost, sshPort, sshUser, privateKeyPath, passphrase);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得一个SSH会话,重用已经使用的会话
|
||||
*
|
||||
* @param sshHost 主机
|
||||
* @param sshPort 端口
|
||||
* @param sshUser 用户名
|
||||
* @param privateKey 私钥内容
|
||||
* @param passphrase 私钥密码
|
||||
* @return SSH会话
|
||||
* @since 5.8.18
|
||||
*/
|
||||
public static Session getSession(String sshHost, int sshPort, String sshUser, byte[] privateKey, byte[] passphrase) {
|
||||
return JschSessionPool.INSTANCE.getSession(sshHost, sshPort, sshUser, privateKey, passphrase);
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开一个新的SSH会话
|
||||
*
|
||||
@@ -117,6 +132,42 @@ public class JschUtil {
|
||||
return openSession(sshHost, sshPort, sshUser, privateKeyPath, passphrase, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开一个新的SSH会话
|
||||
*
|
||||
* @param sshHost 主机
|
||||
* @param sshPort 端口
|
||||
* @param sshUser 用户名
|
||||
* @param privateKey 私钥内容
|
||||
* @param passphrase 私钥文件的密码,可以为null
|
||||
* @return SSH会话
|
||||
* @since 5.8.18
|
||||
*/
|
||||
public static Session openSession(String sshHost, int sshPort, String sshUser, byte[] privateKey, byte[] passphrase) {
|
||||
return openSession(sshHost, sshPort, sshUser, privateKey, passphrase, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开一个新的SSH会话
|
||||
*
|
||||
* @param sshHost 主机
|
||||
* @param sshPort 端口
|
||||
* @param sshUser 用户名
|
||||
* @param privateKey 私钥内容
|
||||
* @param passphrase 私钥文件的密码,可以为null
|
||||
* @return SSH会话
|
||||
* @since 5.8.18
|
||||
*/
|
||||
public static Session openSession(String sshHost, int sshPort, String sshUser, byte[] privateKey, byte[] passphrase, int timeOut) {
|
||||
final Session session = createSession(sshHost, sshPort, sshUser, privateKey, passphrase);
|
||||
try {
|
||||
session.connect(timeOut);
|
||||
} catch (JSchException e) {
|
||||
throw new JschRuntimeException(e);
|
||||
}
|
||||
return session;
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开一个新的SSH会话
|
||||
*
|
||||
@@ -184,6 +235,31 @@ public class JschUtil {
|
||||
return createSession(jsch, sshHost, sshPort, sshUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新建一个新的SSH会话,此方法并不打开会话(既不调用connect方法)
|
||||
*
|
||||
* @param sshHost 主机
|
||||
* @param sshPort 端口
|
||||
* @param sshUser 用户名,如果为null,默认root
|
||||
* @param privateKey 私钥内容
|
||||
* @param passphrase 私钥文件的密码,可以为null
|
||||
* @return SSH会话
|
||||
* @since 5.8.18
|
||||
*/
|
||||
public static Session createSession(String sshHost, int sshPort, String sshUser, byte[] privateKey, byte[] passphrase) {
|
||||
Assert.isTrue(privateKey != null && privateKey.length > 0, "PrivateKey must be not empty!");
|
||||
|
||||
final JSch jsch = new JSch();
|
||||
final String identityName = StrUtil.format("{}@{}:{}", sshUser, sshHost, sshPort);
|
||||
try {
|
||||
jsch.addIdentity(identityName, privateKey, null, passphrase);
|
||||
} catch (JSchException e) {
|
||||
throw new JschRuntimeException(e);
|
||||
}
|
||||
|
||||
return createSession(jsch, sshHost, sshPort, sshUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建一个SSH会话,重用已经使用的会话
|
||||
*
|
||||
|
Reference in New Issue
Block a user