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

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

<p>若是咱們想在java代碼中遠程鏈接ssh,而且執行一些shell命令,能夠使用jcabi-ssh這個小框架,純java編寫,很方便。這裏介紹一下如何使用。</p>linux

<h2>依賴</h2>shell

<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>ssh

<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>maven

<h2>代碼示例</h2>this

<p>代碼很簡單,示例以下:</p>url

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

<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>

繼續閱讀->

相關文章
相關標籤/搜索