`
8366
  • 浏览: 798774 次
  • 性别: 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  
受教了,谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics