可以使用jcabi-ssh在Java中通过几行代码通过SSH执行shell命令:
String hello = new Shell.Plain(
new SSH(
"ssh.example.com", 22,
"yegor", "-----BEGIN RSA PRIVATE KEY-----..."
)
).exec("echo 'Hello, world!'");
jcabi-ssh是JSch的便捷包装, JSch是SSH2的著名纯Java实现。
这是一个更复杂的场景,其中我通过SSH上传文件,然后读回其grepped的内容:
Shell shell = new SSH(
"ssh.example.com", 22,
"yegor", "-----BEGIN RSA PRIVATE KEY-----..."
);
File file = new File("/tmp/data.txt");
new Shell.Safe(shell).exec(
"cat > d.txt && grep 'some text' d.txt",
new FileInputStream(file),
Logger.stream(Level.INFO, this),
Logger.stream(Level.WARNING, this)
);
实现接口Shell
SSH
类只有一种方法exec
。 此方法接受四个参数:
interface Shell {
int exec(
String cmd, InputStream stdin,
OutputStream stdout, OutputStream stderr
);
}
我认为这些论点是显而易见的。
还有一些方便的修饰器,使使用简单命令更容易操作。
壳牌安全
Shell.Safe
装饰Shell
一个实例,并且如果exec
退出代码不等于零,则引发异常。 当您要确保命令成功执行但又不想在代码的很多地方重复if/throw
不重复时,这可能非常有用。
Shell ssh = new Shell.Safe(
new SSH(
"ssh.example.com", 22,
"yegor", "-----BEGIN RSA PRIVATE KEY-----..."
)
);
壳牌
Shell.Verbose
装饰Shell
一个实例,并将stdout
和stderr
复制到slf4j日志记录工具(使用jcabi-log )。 当然,您可以组合装饰器,例如:
Shell ssh = new Shell.Verbose(
new Shell.Safe(
new SSH(
"ssh.example.com", 22,
"yegor", "-----BEGIN RSA PRIVATE KEY-----..."
)
)
);
壳牌
Shell.Plain
是Shell
的包装,它引入了一个仅具有一个参数(执行命令)的新exec
方法。 它还不返回退出代码,而是返回stdout
。 当您想执行一个简单命令并仅获取其输出时,这应该非常方便(为了安全Shell.Safe
,我将其与Shell.Safe
结合使用):
String login = new Shell.Plain(new Shell.Safe(ssh)).exec("whoami");
下载
您在Maven项目中需要一个依赖项jcabi-ssh.jar
(在Maven Central中获取最新版本):
<dependency>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-ssh</artifactId>
</dependency>
- 该项目在Github中 。 如果您有任何问题,只需提交一个问题。 我会尽力的。
相关文章
您可能还会发现以下有趣的帖子:
翻译自: https://www.javacodegeeks.com/2014/09/simple-java-ssh-client.html