JschUtil新增一个重载方法以支持私钥以byte数组形式载入

This commit is contained in:
creekmoon
2023-04-12 22:43:44 +08:00
committed by yinjiangyue
parent 74bf08c5ac
commit 64975c1ea9
3 changed files with 130 additions and 2 deletions

View File

@@ -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
*

View File

@@ -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会话重用已经使用的会话
*