当前位置: 首页 > 工具软件 > jcabi-http > 使用案例 >

java ssh命令参数_使用jcabi-ssh在java中操作ssh命令

宇文俊明
2023-12-01

使用jcabi-ssh在java中操作ssh命令

如果我们想在java代码中远程连接ssh,并且执行一些shell命令,可以使用jcabi-ssh这个小框架,纯java编写,很方便。这里介绍一下如何使用。

依赖

com.jcabi

jcabi-ssh

1.1

2.0版本,作者没有正式发布

oss.sonatype.org

https://oss.sonatype.org/content/repositories/snapshots/

com.jcabi

jcabi-ssh

2.0-SNAPSHOT

代码示例

代码很简单,示例如下:

String hello = new Shell.Plain(

new SSH(

"ssh.example.com", 22,

"yegor", "-----BEGIN RSA PRIVATE KEY-----...")

).exec("echo ‘Hello, world!‘");

注意,私钥是本机的私钥串,linux的话在/home/yourname/.ssh中的id_rsa文件中,将里面的内容全部copy到方法中,包括-----BEGIN RSA PRIVATE KEY-----,-----END RSA PRIVATE KEY-----这两行。

想实现本机私钥登录,还得把本机的公钥复制到目标机器上,公钥在.ssh文件夹中的id_rsa.pub文件中,将里面的文本全部复制到目标机器/home/yourname/.ssh/authorized_keys文件中,这样就可以实现本机免密码ssh登录目标机器。

下面是个更复杂的场景,使用ssh上传一个文件到服务器,然后grep其中的内容来显示。

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 ‘hello‘ d.txt",

new FileInputStream(file),

Logger.stream(Level.INFO, this),

Logger.stream(Level.WARNING, this)

);

SSH这个类实现了Shell接口,这个接口其实就一个方法exec,exec方法接收四个参数:

interface Shell {

int exec(

String cmd, InputStream stdin,

OutputStream stdout, OutputStream stderr

);

}

Shell.Safe

Shell.Safe对原生的Shell对象做了一些封装,如果exec方法返回值不是0,就会抛出异常。根据返回值可以确认shell命令是否成功执行。

 类似资料: