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

<h1>使用jcabi-ssh在java中操作ssh命令</h1>

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

<h2>依赖</h2>

<p>java框架,依赖的包肯定是jar文件了,jar包地址<a href="http://repo1.maven.org/maven2/com/jcabi/jcabi-ssh/1.1/jcabi-ssh-1.1.jar">http://repo1.maven.org/maven2/com/jcabi/jcabi-ssh/1.1/jcabi-ssh-1.1.jar</a>,如果使用maven管理,可以添加依赖:</p>

<pre><code> &lt;dependency&gt; &lt;groupId&gt;com.jcabi&lt;/groupId&gt; &lt;artifactId&gt;jcabi-ssh&lt;/artifactId&gt; &lt;version&gt;1.1&lt;/version&gt; &lt;/dependency&gt; </code></pre>

<p>2.0版本,作者没有正式发布</p>

<pre><code> &lt;repositories&gt; &lt;repository&gt; &lt;id&gt;oss.sonatype.org&lt;/id&gt; &lt;url&gt;https://oss.sonatype.org/content/repositories/snapshots/&lt;/url&gt; &lt;/repository&gt; &lt;/repositories&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;com.jcabi&lt;/groupId&gt; &lt;artifactId&gt;jcabi-ssh&lt;/artifactId&gt; &lt;version&gt;2.0-SNAPSHOT&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; </code></pre>

<h2>代码示例</h2>

<p>代码很简单,示例如下:</p>

<pre><code> String hello = new Shell.Plain( new SSH( "ssh.example.com", 22, "yegor", "-----BEGIN RSA PRIVATE KEY-----...") ).exec("echo 'Hello, world!'"); </code></pre>

<p>注意,私钥是本机的私钥串,linux的话在/home/yourname/.ssh中的id_rsa文件中,将里面的内容全部copy到方法中,包括<strong>-----BEGIN RSA PRIVATE KEY-----</strong>,<strong>-----END RSA PRIVATE KEY-----</strong>这两行。<br/> 想实现本机私钥登录,还得把本机的公钥复制到目标机器上,公钥在.ssh文件夹中的id_rsa.pub文件中,将里面的文本全部复制到目标机器/home/yourname/.ssh/authorized_keys文件中,这样就可以实现本机免密码ssh登录目标机器。</p>

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

<pre><code> 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 &gt; d.txt &amp;&amp; grep 'hello' d.txt", new FileInputStream(file), Logger.stream(Level.INFO, this), Logger.stream(Level.WARNING, this) ); </code></pre>

<p><strong><code>SSH</code></strong>这个类实现了<code>Shell</code>接口,这个接口其实就一个方法<code>exec</code>,exec方法接收四个参数:</p>

<pre><code> interface Shell { int exec( String cmd, InputStream stdin, OutputStream stdout, OutputStream stderr ); } </code></pre>

<h3>Shell.Safe</h3>

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

继续阅读->

转载于:https://my.oschina.net/u/147181/blog/325830

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值