可以使用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中 。 如果您有任何问题,只需提交一个问题。 我会尽力的。
相关文章
您可能还会发现以下有趣的帖子:
- 流利的JDBC装饰器
- 如何在异常上重试Java方法
- 缓存Java方法结果
- 如何读取MANIFEST.MF文件
- 带有AOP和注释的Java方法记录
翻译自: https://www.javacodegeeks.com/2014/09/simple-java-ssh-client.html