首页 > 代码库 > 使用jcabi-ssh在java中操作ssh命令
使用jcabi-ssh在java中操作ssh命令
使用jcabi-ssh在java中操作ssh命令
如果我们想在java代码中远程连接ssh,并且执行一些shell命令,可以使用jcabi-ssh这个小框架,纯java编写,很方便。这里介绍一下如何使用。
依赖
java框架,依赖的包肯定是jar文件了,jar包地址http://repo1.maven.org/maven2/com/jcabi/jcabi-ssh/1.1/jcabi-ssh-1.1.jar,如果使用maven管理,可以添加依赖:
<dependency>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-ssh</artifactId>
<version>1.1</version>
</dependency>
2.0版本,作者没有正式发布
<repositories>
<repository>
<id>oss.sonatype.org</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-ssh</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
</dependencies>
代码示例
代码很简单,示例如下:
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命令是否成功执行。
继续阅读->
使用jcabi-ssh在java中操作ssh命令
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。