mirror of
https://github.com/LamGC/Oracle-Sentry.git
synced 2025-04-29 22:27:34 +00:00
feat(sftp): Sftp 现在支持获取用户主目录.
鉴于当前尚不支持使用"~"指向用户主目录, 为此提供解决方法.
This commit is contained in:
parent
2006097d5f
commit
ab69189d5b
@ -1,10 +1,12 @@
|
|||||||
package net.lamgc.oracle.sentry.oci.compute.ssh;
|
package net.lamgc.oracle.sentry.oci.compute.ssh;
|
||||||
|
|
||||||
|
import net.lamgc.oracle.sentry.common.LazyLoader;
|
||||||
import org.apache.sshd.sftp.client.SftpClient;
|
import org.apache.sshd.sftp.client.SftpClient;
|
||||||
import org.apache.sshd.sftp.common.SftpConstants;
|
import org.apache.sshd.sftp.common.SftpConstants;
|
||||||
import org.apache.sshd.sftp.common.SftpException;
|
import org.apache.sshd.sftp.common.SftpException;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.DirectoryNotEmptyException;
|
import java.nio.file.DirectoryNotEmptyException;
|
||||||
import java.nio.file.NoSuchFileException;
|
import java.nio.file.NoSuchFileException;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -30,6 +32,7 @@ public class SftpSession implements Closeable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final SftpClient sftpClient;
|
private final SftpClient sftpClient;
|
||||||
|
private final LazyLoader<String> userHome;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建 Sftp 会话.
|
* 创建 Sftp 会话.
|
||||||
@ -37,6 +40,20 @@ public class SftpSession implements Closeable {
|
|||||||
*/
|
*/
|
||||||
SftpSession(SftpClient sftpClient) {
|
SftpSession(SftpClient sftpClient) {
|
||||||
this.sftpClient = sftpClient;
|
this.sftpClient = sftpClient;
|
||||||
|
this.userHome = new LazyLoader<>(() -> {
|
||||||
|
try {
|
||||||
|
CommandExecSession echoHOME = new CommandExecSession(sftpClient.getSession().createExecChannel("echo $HOME"));
|
||||||
|
ByteArrayOutputStream outBuffer = new ByteArrayOutputStream();
|
||||||
|
echoHOME.setOut(outBuffer);
|
||||||
|
echoHOME.exec();
|
||||||
|
if (echoHOME.exitCode() != null && echoHOME.exitCode() == 0) {
|
||||||
|
return outBuffer.toString(StandardCharsets.UTF_8).trim();
|
||||||
|
}
|
||||||
|
throw new IOException("Command execution failed.(ExitCode: " + echoHOME.exitCode() + ")");
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -247,4 +264,17 @@ public class SftpSession implements Closeable {
|
|||||||
sftpClient.close();
|
sftpClient.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户主目录.
|
||||||
|
* @return 返回用户主目录, 例如: "/root", 末尾无符号.
|
||||||
|
* @throws IOException 如果操作失败, 则抛出异常.
|
||||||
|
*/
|
||||||
|
public String getUserHome() throws IOException {
|
||||||
|
try {
|
||||||
|
return userHome.getInstance();
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
throw (IOException) e.getCause();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user