`
8366
  • 浏览: 810140 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ganymed-ssh2 for Java

阅读更多

ganymed-ssh2简介:

 

 

Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。可以利用它直接在Java程序中连接SSH服务器。Ganymed SSH-2支持SSH对话(远程命令执行和shell访问),本地和远程端口转发,本地数据流转发,X11转发和SCP。这些都没有依赖任何JCE provider,而且所有这些都包含加密的功能。

 

下载地址:

http://www.ganymed.ethz.ch/ssh2/

 

使用方法:

ganymed-ssh2-build210.jar 加入到项目的lib

 

下面我们重点介绍一下ganymed-ssh2 的使用,非常简单:

 

 

 

 

打印结果:

 

Here is some information about the remote host:

root     pts/1        133.64.37.208    Sun May  3 13:16 - 13:19  (00:03)   

 

wtmp begins Sun May  3 13:16:08 2009

ExitCode: 0 

 

 总结使用步骤:

 

1.  首先构造一个连接器,传入一个需要登陆的ip地址

Connection conn = new Connection(hostname);

2.  模拟登陆目的服务器 传入用户名和密码

boolean isAuthenticated = conn.authenticateWithPassword(username, password);它会返回一个布尔值,true 代表成功登陆目的服务器,否则登陆失败

3.  打开一个session,有点象Hibernatesession ,执行你需要的linux 脚本命令 。

Session sess = conn.openSession();

sess.execCommand("last");

4. 接收目标服务器上的控制台返回结果,读取br中的内容

InputStream stdout = new StreamGobbler(sess.getStdout());

BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

5.得到脚本运行成功与否的标志 0-成功 0-失败

System.out.println("ExitCode: " + sess.getExitStatus());

6.关闭sessionconnection

 sess.close();

 conn.close();

 

 

注意的地方:如果你需要执行多个linux控制台脚本,比如第一个脚本的返回结果是第二个脚本的入参,你必须打开多个Session,也就是多次调用

Session sess = conn.openSession();,使用完毕记得关闭就可以了

 

 

 

package cn.com.xinli.ssh.test;   
import java.io.BufferedReader;   
import java.io.IOException;   
import java.io.InputStream;   
import java.io.InputStreamReader;   
  
import ch.ethz.ssh2.Connection;   
import ch.ethz.ssh2.Session;   
import ch.ethz.ssh2.StreamGobbler;   
  
public class Basic   
{   
    public static void main(String[] args)   
    {   
        String hostname = "172.100.1.64";   
        String username = "******";   
        String password = "******";   
  
  
        try  
        {   
            /* Create a connection instance */  
  
            Connection conn = new Connection(hostname);   
  
            /* Now connect */  
  
            conn.connect();   
  
            /* Authenticate.  
             * If you get an IOException saying something like  
             * "Authentication method password not supported by the server at this stage."  
             * then please check the FAQ.  
             */  
  
            boolean isAuthenticated = conn.authenticateWithPassword(username, password);   
  
            if (isAuthenticated == false)   
                throw new IOException("Authentication failed.");   
  
            /* Create a session */  
  
            Session sess = conn.openSession();   
  
            sess.execCommand("last");   
  
            System.out.println("Here is some information about the remote host:");   
  
            /*   
             * This basic example does not handle stderr, which is sometimes dangerous  
             * (please read the FAQ).  
             */  
  
            InputStream stdout = new StreamGobbler(sess.getStdout());   
  
            BufferedReader br = new BufferedReader(new InputStreamReader(stdout));   
  
            while (true)   
            {   
                String line = br.readLine();   
                if (line == null)   
                    break;   
                System.out.println(line);   
            }   
  
            /* Show exit status, if available (otherwise "null") */  
               
            /**  
             * 0 成功  
             * 1 失败  
             */  
               
            System.out.println("ExitCode: " + sess.getExitStatus());   
  
            /* Close this session */  
  
            sess.close();   
  
            /* Close the connection */  
  
            conn.close();   
  
        }   
        catch (IOException e)   
        {   
            e.printStackTrace(System.err);   
            System.exit(2);   
        }   
    }   
}  

 

  

 

分享到:
评论
17 楼 fm395728572 2016-08-24  
shell脚本中用到了环境变量,但是获取不到,例如脚本中有一句cd $OA_HTML 不能切换到指定目录,怎么处理呢
16 楼 u013239511 2015-03-24  
测试了代码,在windows坏境下,可以顺利执行各种命令。
于是将代码放到项目中,部署到linux环境下,出现问题debug了一下,发现每次运行到
String line = br.readLine()时去读取Linux控制台返回的值时,就卡住了。
好像是进入了类似于waitFor()的状态。
求解
15 楼 silviakafka 2015-02-16  
zhangxing89757 写道
请问下有没有遇到这样的情况:
我的java程序部署在linux环境下面,用它来链接windows机,windows机下的telnet服务和23端口都已经开通,但是却链接不上,但是在linux下用telnet命令,却能够链接上,请问这个是什么原因????

你写的java程序不支持连接windows吧  比如无法匹配返回的prompt(windows下面的prompt是>)
14 楼 zhangxing89757 2014-09-28  
请问下有没有遇到这样的情况:
我的java程序部署在linux环境下面,用它来链接windows机,windows机下的telnet服务和23端口都已经开通,但是却链接不上,但是在linux下用telnet命令,却能够链接上,请问这个是什么原因????
13 楼 silviakafka 2014-07-09  
楼主,如何才能模拟出putty等客户端登陆的效果呢,就是前面有当前登陆的用户和目录
像:[root@AY140321084527950cefZ usr]#
这个方式返回的好像只有#号后面的内容  前面的内容没有  如何获得呢?
12 楼 ty709928686 2014-06-06  
11 楼 start_p 2014-05-04  
frenchleaf 写道
嗨,问个问题呗,我想长连接怎么写?
比如用root登录,
想达到
第一个命令"pwd"输出"/root"
第二个命令"cd test"
第三个命令"pwd"输出"/root/test"

如果想做成这样,这三个命令共享conn和session都达不到啊,
有什么办法吗?谢谢哈

sess.execCommand("pwd");    
sess.close();
sess.execCommand("cd test");
sess.close();
sess.execCmmand("pwd");
sess.close();
或者sess.execCmmand"pwd && cd rpt && pwd");
10 楼 lix909 2014-01-21  
frenchleaf 写道
嗨,问个问题呗,我想长连接怎么写?
比如用root登录,
想达到
第一个命令"pwd"输出"/root"
第二个命令"cd test"
第三个命令"pwd"输出"/root/test"

如果想做成这样,这三个命令共享conn和session都达不到啊,
有什么办法吗?谢谢哈



恩 求教
9 楼 wyfspring 2012-12-27  
LZ的代码是从ssh2上面的example上面贴过来的。
8 楼 jeremyking 2012-08-09  
请问下如何进行交互:
如我先执行:ssh root@61.142.114.210
然后接着提示输入密码
这种要怎么实现?
7 楼 275553385 2012-07-10  
jxxms 写道
要执行的脚本中取不到/etc/profile 里设置的环境变量 ,要怎么才能得到

可以在你执行的脚本中设置需要用到的变量 如:写全路径。这个问题和父子SHELL有关。看看这方面的可以解决你的问题。。
6 楼 jxxms 2012-07-10  
要执行的脚本中取不到/etc/profile 里设置的环境变量 ,要怎么才能得到
5 楼 275553385 2012-06-30  
withrun 写道
您好:如果要连接的linux服务器的SSH端口号不是默认的22,而是其他的,怎么修改?

new Connection("localhost", 22);中不是有指定端口号的么。
4 楼 withrun 2012-03-21  
您好:如果要连接的linux服务器的SSH端口号不是默认的22,而是其他的,怎么修改?
3 楼 frenchleaf 2010-08-22  
嗨,问个问题呗,我想长连接怎么写?
比如用root登录,
想达到
第一个命令"pwd"输出"/root"
第二个命令"cd test"
第三个命令"pwd"输出"/root/test"

如果想做成这样,这三个命令共享conn和session都达不到啊,
有什么办法吗?谢谢哈
2 楼 volking 2010-08-10  
ExitCode: 为何是null?
应该怎么配置呢?
1 楼 b052617 2009-09-09  
受教了,谢谢

相关推荐

    Java运用ganymed-ssh2-build210.jar包远程连接操作linux服务器

    Java 远程连接 Linux 服务器使用 Ganymed-SSH2 库 标题解释 本文档的标题是"Java 运用 Ganymed-SSH2 库远程连接操作 Linux 服务器",这意味着我们将使用 Java 语言来远程连接 Linux 服务器,并使用 Ganymed-SSH2...

    ganymed-ssh2 工具类

    ganymed-ssh2是一个开源Java库,它提供了对SSH2协议的全面支持,使得开发人员能够在Java应用程序中轻松地进行远程操作,如执行命令、传输文件等。本文将深入探讨ganymed-ssh2工具类的使用及其核心功能。 ** SSH连接...

    ganymed-ssh2-build250.rar,jar包,源码,例子,javadoc

    再者,`ganymed-ssh2-build250-examples.jar`包含了一些示例代码,这些示例展示了如何使用Ganymed SSH2库进行基本操作,如建立SSH连接、执行远程命令、SFTP文件传输等。开发者可以通过运行这些示例快速上手,为自己...

    ganymed-ssh2-262.jar

    标题中的“ganymed-ssh2-262.jar”是一个特定版本的SSH2库,由Ganymed项目提供,用于Java环境下的SSH(Secure Shell)连接。SSH是一种网络协议,常用于安全地远程登录到服务器、传输文件以及执行命令。Ganymed SSH2...

    ganymed-ssh2-build210

    ganymed-ssh2-build210是Java平台上一个流行的开源SSH2实现库,由Christian Schneider开发并维护。这个库提供了全面的功能,包括文件传输、命令执行、端口转发等,广泛应用于自动化运维、远程控制、数据同步等多个...

    Java(通过ganymed-ssh2-build210.jar)实现SSH远程连接linux终端

    Java通过ganymed-ssh2-build210.jar库实现SSH远程连接Linux终端是一个常见的应用场景,主要用于自动化运维、系统管理或者开发过程中需要与Linux服务器交互的场景。ganymed-ssh2-build210.jar是Java的一个开源SSH库,...

    ssh协议依赖jar包:ganymed-ssh2-build

    在Java环境中,开发人员通常使用库来实现SSH功能,其中一个常用的库就是Ganymed SSH-2。这个库名为ganymed-ssh2-build,它允许Java应用程序与远程服务器建立SSH连接,执行命令,传输文件等。 Ganymed SSH-2库是由...

    ganymed-ssh2-bui.jar 和jad.exe

    ganymed-ssh2-bui.jar 是java从远程服务器下载文件删除文件必须要的jar包,直接放到系统中即可。 jad.exe 是在eclipse中用java从远程服务器下载文件时会报错,在eclipse中跑的话,需要设置路径,windows-preferences...

    ganymed-ssh2-build210-sources.jar.zip

    下载网站https://repo1.maven.org/maven2/ch/ethz/ganymed/ganymed-ssh2/build210/ 此jar源码文件中包含以下这些类: SCPClient.lass Session.class Connection.clss 等许多文件传输类。 查看源码的方法: 1.把此jar...

    ganymed-ssh2

    ganymed-ssh2 ,java支持ssh协议的jar包

    ganymed-ssh2.rar

    这个压缩包中可能包含ganymed-ssh2的两个不同版本的构建——build250和build210,这是一个开源的Java实现SSH2协议的库。SSH2是SSH协议的第二版,提供了更强大的加密和身份验证机制,广泛应用于Linux系统中。 描述中...

    ganymed-ssh2 远程连接java实例代码

    Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。可以利用它直接在Java程序中连接SSH服务器。Ganymed SSH-2支持SSH对话(远程命令执行和shell访问),本地和远程端口转发,本地数据流转发,X11转发和SCP。这些...

    ganymed-ssh2-263.jar

    解决openssh升级到8.2以后无法登录的问题,支持jdk1.5及以上版本

    ganymed-ssh2-build210.jar

    使用ganymed-ssh2-build210.jar从远程服务器拉取文件到本地,或上传文件到指定服务器下的目录。个人略微修改了jar包的内容,解决了文件名中带空格时报错的问题,可以下载名字中带空格的文件。

    ganymed-ssh2-build207

    ganymed-ssh2 ,java支持ssh协议的jar包

    ganymed-ssh2-build210.zip

    连接linux 的jar。连接linux 的jar。连接linux 的jar。连接linux 的jar。连接linux 的jar。连接linux 的jar。 ganymed-ssh2-build210

    ganymed-ssh2-build210.7z

    ganymed-ssh2-build210.7zganymed-ssh2-build210.7zganymed-ssh2-build210.7zganymed-ssh2-build210.7zganymed-ssh2-build210.7zganymed-ssh2-build210.7zganymed-ssh2-build210.7z

Global site tag (gtag.js) - Google Analytics