使用* .ppk通过Java连接SSH(运行命令行)

时间:2012-04-26 07:58:29

标签: java ssh

我正在编写java swing app。我需要我的应用程序连接到服务器CentOS 5.5,使用用户名+ * .ppk文件(我没有密码)。然后,我的应用程序在此服务器上执行一些命令行。

这可能吗?什么库最适合它?

4 个答案:

答案 0 :(得分:5)

有许多库支持您尝试以不同方式实现的目标。 如今,通过Java连接到SSH服务器已经不是什么大事了。

您可能会考虑使用这些库:


木卫

Ganymede由苏黎世联邦理工学院的一些学生制作,效果很好。我个人在一个使用Java 1.3在一台非常旧的机器上运行的项目中使用它。它除了JRE之外不需要任何东西。然而,它不再是非常活跃的。有一家公司似乎支持它(Cleondris),但我不知道它们有多可靠。无论多么重要,因为它无论如何都是开源的。如果您需要在旧的Java版本上运行您的应用程序或需要知道,您的应用程序使用Java Cryptography Extension(JCE)运行,您可以选择此项。


JSch

JSch也是一个成熟的软件,只是有效。如果您曾经使用过ant进行SSH / SCP相关任务,那么您可能已经知道了。这总是很麻烦,因为你必须手动将它提供给蚂蚁:-) 该项目得到了很好的维护,因为它似乎已被广泛使用。我在很多现代UI / Batch应用程序中使用它,并且/我总是很满意它。它确实使用JCE,我曾经遇到过这个问题(在较旧的JRE上,但仍然)。如果您计划将软件分发给您不熟悉的客户,这可能是一个问题。 JCE需要在JRE安装本身内安装/配置的东西。可能99%的时间都在工作,但仍然......


SSHTools

从未使用过这个但听过好的东西。值得一试。


使用Java

将ppk转换为OpenSSH格式

因为这显然是可能的,所以只需要实现它。幸运的是,实际上有多个实现。它甚至可以在一个建议的SSH库中实现,但我没有检查。

快速谷歌搜索向我展示了两个选择:

三铅腻子扩展

对我来说似乎是一个非常好的选择。虽然它是Trilead SSH库的扩展(它似乎不再可用),但它并不是很多代码,可以很容易地集成到现有项目中。有一个类可以完成工作并可以将ppk密钥转换为openssh密钥。字符串到字符串,所以没有惊喜。真的应该是小菜一碟。

我不知道Trilead发生了什么。该公司在他们的网站上不再提及它,但它在某些时候存在(http://techtavern.wordpress.com/2008/11/13/about-trilead-ssh-open-source-project/)。

顺便说一下:写这篇文章的人也是詹金斯/哈德森写的那个人。 http://kohsuke.org/


“ChillKat”Java库

嗯......这只是一种替代方案。为此只下载一个“多用途”库似乎不值得付出努力和开销。您可以提取相关部分或让自己受到启发。也许trilead扩展不起作用,你必须选择这个,但我不认为它是第一选择。


您当然可以手动转换.ppk文件,如下所述:http://www.lmolnar.com/geek/how-to-convert-puttys-private-key-ppk-into-opensshs-private-key-format-in-linux/

其他地方,我想。还有图形工具puttygen,它通过putty网站(http://www.chiark.greenend.org.uk/~sgtatham/putty/)包含在putty-installer或可下载的独立版中。

您想了解更多吗?

请检查:http://linuxmafia.com/ssh/java.html或撰写评论。

答案 1 :(得分:2)

如果将.ppk转换为较不专有的格式(即.pub rsa或dsa)是一个选项,那么试试puttygen(用法:" puttygen keyfile.ppk -o id_rsa - 来自putty-tools包的o private-openssh") 然后使用SSHTools,一个用于SSH的Java API(以及更多)

答案 2 :(得分:0)

其中一个选项是使用我们的SecureBlackbox产品的SSHBlackbox包。它支持加载Putty密钥和完整范围的SSH相关功能(SFTP需要SFTPBlackbox包)。 SecureBlackbox附带了大量示例和支持。

答案 3 :(得分:0)

当前的JSch版本不支持* .ppk文件, 但是JSch可以通过Putty的Pageant使用jsch-agent-proxy来使用这些文件。