Java 遠程調用 shell腳本

* pom.xml 引入相關jar包  
   
```
    <dependency>
        <groupId>ch.ethz.ganymed</groupId>
        <artifactId>ganymed-ssh2</artifactId>
        <version>262</version>
    </dependency>
```  
* 遠程服務器上代碼  
  
```
#/bin/bash
echo  "hello world"
```shell

* 相關Java代碼  
```
public class RemoteShellExecutor {bash

    private Connection conn;
    private String ip;
    private String osUserName;
    private String password;
    private String charset = Charset.defaultCharset().toString();
    private static final int TIME_OUT = 1000 * 5 * 60;服務器

    public RemoteShellExecutor(String ip, String username, String password) {
        this.ip = ip;
        this.osUserName = username;
        this.password = password;
    }session

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

    public int exec(String cmds) throws IOException {ssh

        InputStream stdOut = null;
        InputStream stdErr = null;
        String outStr = "";
        String outErr = "";
        int ret = 1;ui

        if (login()) {this

            try {
                Session session = conn.openSession();
                session.execCommand(cmds);xml

                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);ip

                System.out.println("outStr = " + outStr);
                System.out.println("outErr = " + outErr);

                ret = session.getExitStatus();

            } finally {
                if (conn != null) {
                    conn.close();
                }
                IOUtils.closeQuietly(stdOut);
                IOUtils.closeQuietly(stdErr);
            }

        }

        return ret;
    }

    public String processStream(InputStream in, String charset)
            throws UnsupportedEncodingException, IOException {
        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 IOException {
        RemoteShellExecutor rse = new RemoteShellExecutor("IP", "root", "12312");
        System.out.println(rse.exec("/root/test_shell.sh"));
    }

}
```

* 輸出結果     ``` outStr = hello world outErr =  0 ```

相關文章
相關標籤/搜索