SSH与Java

[原文地址:http://andrius.miasnikovas.lt/2009/07/ssh-with-java/]

最近,我需要做一些基于SSH-2协议操纵服务器的Java客户端程序。有相当多Java的SSH库可以选择。通常我喜欢尽可能使用BSD许可,所以我想我将会用Ganymed的SSH-2作为尝试。它很简单易用。下面是一个简短的例子如何连接到服务器使用的私钥,并执行一些命令。

import java.io.* ;
import ch.ethz.ssh2.* ;

public classExample {
public static voidmain ( String [ ]args ) throws IOException {
Connectionconn = new Connection ( "hostname" ) ;
conn. connect ( ) ;
FilepemKeyFile = new File ( "privKey.pem" ) ;
booleanisAuth =conn. authenticateWithPublicKey ( "user", pemKeyFile, "keyPwd" ) ;
if (isAuth == false ) {
throw new IOException ( "Authentication failed." ) ;
}

Session sess =conn. openSession ( ) ;
sess. execCommand ( "netstat -nl | egrep ':80' | wc -l" ) ;
InputStreaminp =sess. getStdout ( ) ;
InputStreamReaderreader = new InputStreamReader (inp ) ;
BufferedReaderbr = new BufferedReader (reader ) ;
Stringline =br. readLine ( ) ;

sess. close ( ) ;
conn. close ( ) ;
}
}

如果你不熟悉通过SSH公钥/私钥认证,请参阅下面的链接或谷歌搜索“无密码的ssh登录”。

http://ariadne.mse.uiuc.edu/Cluster/ssh_log_through.html

http://www.debian-administration.org/articles/152

大多数教程不会提到的一件事是,你的宿主目录应该有权限755。通过反复试验,我发现一些用户的主目录有777权限,只是不让你登陆一个私钥。

另一件事,我需要做的是复制一个文件到服务器。现在,这给了我一些意想不到的问题。虽然API似乎很简单,但是下面的代码没有任何效果。

Stringdata = "sample data" ;
SFTPv3Client client = newSFTPv3Client (conn ) ;
SFTPv3FileHandle handle =client. createFile ( "test_file.txt" ) ;

byte [ ]arr =data. getBytes ( ) ;
client. write (handle, 0, arr, 0, arr. length ) ;
client. closeFile (handle ) ;
client. close ( ) ;

在这里,conn对象是用于获取SSH连接,如第一段代码块所示。这看起来很简单,在服务器上创建一个文件,写一些字节,然后关闭,但是运行的结果只是在服务器上创建文件,但它始终是0字节的长度。我花了一段时间来弄清楚是什么错。现在是时候提到我用的是他们的网页上提供的“最新版本”Ganymed - build210。这让我很苦恼,代码没有按我希望的正常运行让我很沮丧,我开始查看Ganymed源码,我发现在SFTPv3Client类中的write(...)方法有一个不可满足的条件语句。我解决了这个问题,重新编译Ganymed的类库并可以运行。再后来我发现,实际上已经有一个Ganymed build211版,但他们又改了库名为trilead。在这个MAVEN2存储库中,你可以找到它(http://maven.ch.cam.ac.uk/m2repo/com/trilead/ssh2/build211/)。

编辑:2011-10-17

我已经创建了一个Maven项目,一个非常简单的类通过SSH使用Trilead库实现执行shell命令。Maven配置包含所需的库和依赖编译这个类的标签。只需使用MVN包里面提取的目录或创建你的IDE的项目文件。如果您需要更多的帮助与Maven入门指南这是一个很好的开始。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值