[原文地址:http://andrius.miasnikovas.lt/2009/07/ssh-with-java/]
最近,我需要做一些基于SSH-2协议操纵服务器的Java客户端程序。有相当多Java的SSH库可以选择。通常我喜欢尽可能使用BSD许可,所以我想我将会用Ganymed的SSH-2作为尝试。它很简单易用。下面是一个简短的例子如何连接到服务器使用的私钥,并执行一些命令。
如果你不熟悉通过SSH公钥/私钥认证,请参阅下面的链接或谷歌搜索“无密码的ssh登录”。
http://ariadne.mse.uiuc.edu/Cluster/ssh_log_through.html
http://www.debian-administration.org/articles/152
大多数教程不会提到的一件事是,你的宿主目录应该有权限755。通过反复试验,我发现一些用户的主目录有777权限,只是不让你登陆一个私钥。
另一件事,我需要做的是复制一个文件到服务器。现在,这给了我一些意想不到的问题。虽然API似乎很简单,但是下面的代码没有任何效果。
在这里,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入门指南这是一个很好的开始。