`

java实现linux连接操作

阅读更多

此程序需要ganymed-ssh2-build210.jar包。
下载地址:http://www.ganymed.ethz.ch/ssh2/
为了调试方便,可以将\ganymed-ssh2-build210\src下的代码直接拷贝到我们的工程里,
此源码的好处就是没有依赖很多其他的包,拷贝过来干干净净。

此程序的目的是执行远程机器上的Shell脚本。
远程机器IP:***.**.**.***
用户名:sshapp
密码:sshapp
登录后用pwd命令,显示当前目录为:/sshapp.
在/sshapp/myshell/目录下有myTest.sh文件,内容如下:

public class RmtShellExecutor {
    
    

    
private Connection conn;
    

    
private String     ip;
    

    
private String     usr;
    

    
private String     psword;
    
private String     charset = Charset.defaultCharset().toString();

    
private static final int TIME_OUT = 1000 * 5 * 60;

    

    
public RmtShellExecutor(ShellParam param) {
        
this.ip = param.getIp();
        
this.usr = param.getUsername();
        
this.psword = param.getPassword();
    }


    

    
public RmtShellExecutor(String ip, String usr, String ps) {
        
this.ip = ip;
        
this.usr = usr;
        
this.psword = ps;
    }


    

    
private boolean login() throws IOException {
        conn 
= new Connection(ip);
        conn.connect();
        
return conn.authenticateWithPassword(usr, psword);
    }


    

    
public int exec(String cmds) throws Exception {
        InputStream stdOut 
= null;
        InputStream stdErr 
= null;
        String outStr 
= "";
        String outErr 
= "";
        
int ret = -1;
        
try {
            
if (login()) {
                
// Open a new {@link Session} on this connection
                Session session = conn.openSession();
                
// Execute a command on the remote machine.
                session.execCommand(cmds);
                
                stdOut 
= new StreamGobbler(session.getStdout());
                outStr 
= processStream(stdOut, charset);
                
                stdErr 
= new StreamGobbler(session.getStderr());
                outErr 
= processStream(stdErr, charset);
                
                session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
                
                System.out.println(
"outStr=" + outStr);
                System.out.println(
"outErr=" + outErr);
                
                ret 
= session.getExitStatus();
            }
 else {
                
throw new AppException("登录远程机器失败" + ip); // 自定义异常类 实现略
            }

        }
 finally {
            
if (conn != null{
                conn.close();
            }

            IOUtils.closeQuietly(stdOut);
            IOUtils.closeQuietly(stdErr);
        }

        
return ret;
    }


    

    
private String processStream(InputStream in, String charset) throws Exception {
        
byte[] buf = new byte[1024];
        StringBuilder sb 
= new StringBuilder();
        
while (in.read(buf) != -1{
            sb.append(
new String(buf, charset));
        }

        
return sb.toString();
    }


    
public static void main(String args[]) throws Exception {
        RmtShellExecutor exe 
= new RmtShellExecutor("***.**.**.***""sshapp""sshapp");
        
// 执行myTest.sh 参数为java Know dummy
        System.out.println(exe.exec("sh /webapp/myshell/myTest.sh java Know dummy"));
//        exe.exec("uname -a && date && uptime && who");
    }

}

 

注:一般情况下shell脚本正常执行完毕,getExitStatus方法返回0。
此方法通过远程命令取得Exit Code/status。但并不是每个server设计时都会返回这个值,如果没有则会返回null。
在调用getExitStatus时,要先调用WaitForCondition方法,通过ChannelCondition.java接口的定义可以看到每个条件的具体含义
在实际应用中,可以将outStr和outErr记录到日志中,以便维护人员查看shell的执行情况,
而getExitStatus的返回值,可以认为是此次执行是否OK的标准。

 

分享到:
评论

相关推荐

    java实现ssh方式连接linux(包含ganymed-ssh2-build210.jar包)

    java实现ssh方式连接linux(包含ganymed-ssh2-build210.jar包) ---------Java语言+绚丽的界面+仿ssh实现调用Linux的Terminal,实现远程连接linux进行命令行的操作!

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

    Java语言+绚丽的界面+仿ssh实现调用Linux的Terminal,实现远程连接linux进行命令行的操作!

    java连接Linux上的redis,并用代码实现java操作redis的基本操作键(字符串,列表,哈希,散列,有序集合)

    简单来说就是用java实现远程操作redis,ip地址要找到自己linux上连网后的ip地址,在每个case文件中修改后就可以实现了,对应的test文件是实现操作文件,你可以自己写一个主程序把他们包括起来。哦,对了这里面包括了...

    Java远程登录Linux的包

    用于远程操作Linux命令的ssh2包.可以实现远程登录Linux。

    Java远程连接Linux服务器并执行命令及上传文件功能

    主要介绍了Java远程连接Linux服务器并执行命令及上传文件功能,本文是小编整理的代码笔记,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

    java开源包4

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    JAVA物业管理+SQL

    连接成功后,将Java编写的用户界面移植到客户端的Linux操作系统下,并用这个界面试图实现与服务器上NT系统下的数据库SQL连接。以达到在不同的操作系统下可以互相调用的目的,实现Java的重要特性:可移植性。 有文档...

    基于java实现的数据库管理系统.pdf

    基于java实现的数据库管理系统 ⼀、需求分析说明 通过对数据库系统原理的学习,掌握数据库管理系统的运⾏原理,尝试在给定的DBF⽂件操作框架的物理储存基础上通过java建⽴⼀个数据 库管理系统,以更好的温习学习的...

    JAVA上百实例源码以及开源项目源代码

     Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText(); //得到服务器地址  ...

    JAVA上百实例源码以及开源项目

    百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText();...

    Java毕业设计:物业管理系统附毕业论文.rar

    连接成功后,将Java编写的用户界面移植到客户端的Linux操作系统下,并用这个界面试图实现与服务器上NT系统下的数据库SQL连接。以达到在不同的操作系统下可以互相调用的目的,实现Java的重要特性:可移植性。

    java开源包3

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java Socket实现聊天程序

    Windowclose 为ChatRoom.java的内部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。 Clock.java 为客户端程序的一个小程序,实现的一个石英钟功能。 3. 2 系统实现原理 当用户聊天时,将当前用户名...

    通过java向mongodb中插入数据

    使用java向mongodb中插入数据 一、Linux安装mongodb 二、MongoDB客户端工具(MongoVUE)访问mongodb 三、通过Java操作MongoDB

    java源代码:物业管理系统(毕业设计)

    连接成功后,将Java编写的用户界面移植到客户端的Linux操作系统下,并用这个界面试图实现与服务器上NT系统下的数据库SQL连接。以达到在不同的操作系统下可以互相调用的目的,实现Java的重要特性:可移植性。

    java远程读写服务器文件

    主要实现的是登录服务器操作服务器的中的文件数据,支持读写的操作。主要使用的方法getProperties是设置配置的login(参数一是访问服务器的配置,参数二是设置读还是写)方法是读写连接服务器

    java开源包11

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包6

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包9

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    jeasonchan#Blog#Java:sftp和ftp的client端文件操作1

    1背景参考文章:Java使用SFTP和FTP两种连接方式实现对服务器的上传下载java使用JSCH连接FTP(Linux服务器)上传文件到Linux服务器Jav

Global site tag (gtag.js) - Google Analytics