java ssh客户端
可以使用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
java ssh客户端