利用Ganymed SSH-2模拟SSH操作

来源:互联网 发布:咨询师网络继续教育 编辑:程序博客网 时间:2024/05/17 05:17

官方地址:http://www.cleondris.ch/opensource/ssh2/

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.junit.Test;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class TestSSH{
 @Test
        public void testSsh() {
   String hostname = "192.168.88.128";  
         String username = "root";  
         String password = "a150321927";
                try {
                        /* Create a connection instance */
                        Connection conn = new Connection(hostname);// 首先构造一个连接器,传入一个需要登陆的ip地址
                        /* Now connect */
                        conn.connect();
                        System.out.println("connect ok");
                        /*
                         * 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.
                         */
                        //模拟登陆目的服务器 传入用户名和密码 ,
                        //它会返回一个布尔值,true 代表成功登陆目的服务器,否则登陆失败
                        boolean isAuthenticated = conn.authenticateWithPassword(username,password);
                        if (isAuthenticated == false)
                                throw new IOException("Authentication failed.");
                        System.out.println("Authentication ok");
                        /* Create a session */
                        Session sess = conn.openSession();
                        sess.execCommand("uname -a");//执行linux命令
                        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).
                         *接收目标服务器上的控制台返回结果,读取br中的内容
                         */
                        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-成功 非0-失败*/
                        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);
                }
        }
}

运行结果:
connect ok
Authentication ok
Here is some information about the remote host:
Linux localhost.localdomain 2.6.9-78.ELsmp #1 SMP Wed Jul 9 15:39:47 EDT 2008 i686 i686 i386 GNU/Linux
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();,使用完毕记得关闭就可以了

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 单位把档案丢失怎么办 档案在单位丢失怎么办 火车上突发疾病怎么办 在火车上肚子疼怎么办 户口是学签证怎么办 学生去韩国护照怎么办 户口迁移原护照怎么办 考科四档案丢了怎么办 驾照档案袋丢了怎么办 驾照考试档案丢失怎么办 驾校不给档案怎么办 学员卡丢了怎么办 第一次办身份证急用怎么办 医保卡没有磁性怎么办 退休后大病医保怎么办 退休了医保不够怎么办 社保采集信息后怎么办 医保卡个人欠费怎么办 离婚房产不过户怎么办 科目四五次不过怎么办 科二考试下雨怎么办 科目三无法超车怎么办 下雨天考科目二怎么办 考科二下雨对点怎么办 上海自考准考证过期怎么办 驾照到年龄后怎么办 科三考试约不上怎么办 科目四预约不了怎么办 科目三考试迟到怎么办 科目四无法预约怎么办 新车换年检标志怎么办 科目一二次不过怎么办 科目一两次不过怎么办 考科目一没考过怎么办 科目一挂了怎么办 科目一考试不及格怎么办 科二考试不合格怎么办 驾校没给档案怎么办 考科目一没带身份证怎么办 企业经营期限届满怎么办 网上买票待核验怎么办