SSH与Java

17 篇文章 0 订阅
12 篇文章 0 订阅

[原文地址: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  class Example  {
    public  static  void main ( String [ ] args )  throws  IOException  {
         Connection conn  =  new  Connection ( "hostname" ) ;
        conn. connect ( ) ;
         File pemKeyFile  =  new  File ( "privKey.pem" ) ;
         boolean isAuth  = 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" ) ;
         InputStream inp  = sess. getStdout ( ) ;
         InputStreamReader reader  =  new  InputStreamReader (inp ) ;
         BufferedReader br  =  new  BufferedReader (reader ) ;
         String line  = 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似乎很简单,但是下面的代码没有任何效果。

String data  =  "sample data" ;
SFTPv3Client client  =  new SFTPv3Client (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入门指南这是一个很好的开始。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
配置Java项目使用SSH(Secure Shell)的步骤如下: 1. 下载和安装Java开发工具(如Eclipse或IntelliJ IDEA)。 2. 配置Java环境变量,确保Java开发工具可以找到Java的安装路径。 3. 创建一个新的Java项目。 4. 导入SSH的相关库,包括SSH框架(如Spring、Hibernate或MyBatis)的JAR文件,以及SSH所依赖的其他库文件。 5. 在项目中创建Java类,用于配置SSH的相关信息。这些信息包括数据库连接、Spring配置和Hibernate或MyBatis的配置。 6. 配置数据库连接,包括数据库的URL、用户名和密码等。 7. 配置Spring框架,将Spring配置文件引入项目,并配置各个类、接口和Bean的依赖关系。 8. 配置Hibernate或MyBatis,根据项目的需要选择其中一种配置方式。配置文件需要包括实体类(Entity)、映射文件(Mapping)和数据库表之间的关联关系。 9. 编写业务逻辑代码,包括处理请求、访问数据库、处理事务等。 10. 测试SSH项目,通过启动项目并发送请求来验证配置是否正确。可以使用浏览器、Postman或其他HTTP客户端发送HTTP请求。 11. 根据测试结果进行调试和排错,可能需要修改Java类、配置文件或数据库连接等。 12. 在项目开发完成后,可以将项目打包成WAR或JAR文件,并部署到服务器上进行线上运行。 配置SSH项目可能会根据具体情况有所不同,以上步骤仅为一般性指导,具体配置过程可能因项目需求和使用的SSH框架而有所区别

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值