色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

java調用遠程服務器的shell腳本以及停止的方法實現

瀏覽:82日期:2022-08-15 13:37:18

最近接了個需求,要求遠程調shell腳本,你沒聽錯!!!需求就一句話,咱是誰,咱是優秀的開發選手。考慮再三,有兩種實現方式:

方案一:腳本所在服務器安裝一個客戶端,也就是自己寫的一個小程序,本地通過端口調目標服務器的程序,然后程序調本機上的shell腳本!

優點:通過端口調用,用戶不用暴露服務器的賬號密碼,安全性高

缺點:我們需要一直維護這個客戶端程序,而且每接入一臺服務器,都得安裝該客戶端,另外非常考驗客戶端程序的健壯性。

方案二:本地直接通過IP,服務器賬號密碼調遠程服務器的shell腳本

優點:代碼易開發,擴展時只用擴展服務端代碼即可

缺點:用戶服務器的賬號密碼會暴露給服務端,密碼安全問題

把每種方案的優缺點匯報給leader,leader說:按第二種來吧

來吧!!開干,廢話不多說,直接上代碼:

導入程序所需的軟件包:

<dependency> <groupId>org.jvnet.hudson</groupId> <artifactId>ganymed-ssh2</artifactId> <version>build210-hudson-1</version></dependency>

程序涉及的demo:

import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.nio.charset.Charset; import org.apache.commons.io.IOUtils; import ch.ethz.ssh2.ChannelCondition;import ch.ethz.ssh2.Connection;import ch.ethz.ssh2.Session;import ch.ethz.ssh2.StreamGobbler; public class RemoteShellExecutor { private Connection conn; /** 遠程機器IP */ private String ip; /** 用戶名 */ private String osUsername; /** 密碼 */ private String password; private String charset = Charset.defaultCharset().toString(); private final String GET_SHELL_PID = 'ps -ef | grep ’%s’ | grep -v grep |awk ’{print $2}’'; private final String KILL_SHELL_PID = 'kill -15 %s'; private static final int TIME_OUT = 1000 * 5 * 60; /** * 構造函數 * @param ip * @param usr * @param pasword */ public RemoteShellExecutor(String ip, String usr, String pasword) { this.ip = ip; this.osUsername = usr; this.password = pasword; } /** * 登錄 * @return * @throws IOException */ private boolean login() throws IOException { conn = new Connection(ip); conn.connect(); return conn.authenticateWithPassword(osUsername, password); } /** * 執行腳本 * * @param cmds * @return * @throws Exception */ public ExecuteResultVO exec(String cmds) throws Exception { InputStream stdOut = null; InputStream stdErr = null; ExecuteResultVO executeResultVO = new ExecuteResultVO(); 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(); executeResultVO.setOutStr(outStr); executeResultVO.setOutErr(outErr); } else { throw new Exception('登錄遠程機器失敗' + ip); // 自定義異常類 實現略 } } finally { if (conn != null) { conn.close(); } IOUtils.closeQuietly(stdOut); IOUtils.closeQuietly(stdErr); } return ret; } /** * @param in * @param charset * @return * @throws IOException * @throws UnsupportedEncodingException */ private String processStream(InputStream in, String charset) throws Exception { byte[] buf = new byte[1024]; StringBuilder sb = new StringBuilder(); int len = 0; while ((len=in.read(buf)) != -1) { sb.append(new String(buf,0,len, charset)); } return sb.toString(); } public static void main(String args[]) throws Exception { //調遠程shell RemoteShellExecutor executor = new RemoteShellExecutor('192.168.234.123', 'root', 'beebank'); System.out.println(executor.exec('sh /data/checkMysql.sh')); //獲取遠程shell 進程 pid ExecuteResultVO executeResultVO = executor.exec(String.format(GET_SHELL_PID,'sh /data/checkMysql.sh')); //殺掉shell進程 ExecuteResultVO executeResultVO1 = executor.exec(String.format(KILL_SHELL_PID ,executeResultVO.getOutStr())); } public class ExecuteResultVO<T>{ private String outStr; private String outErr; //省略get set }}

經過測試也確實好用啊,大家可以根據這個demo進行相應的修改。到此這篇關于java調遠程服務器的shell腳本以及停止的方法實現的文章就介紹到這了,更多相關java調遠程shell腳本內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 2022国产精品手机在线观看 | 美女午夜色视频在线观看 | 99久久免费精品视频 | 国产成人狂喷潮在线观看2345 | 亚州欧美| 日本免费不卡在线一区二区三区 | 免看一级a一片成人123 | 一级黄色片aaa| 92精品国产自产在线观看 | 久久综合精品国产一区二区三区 | 草草影院第一页yycccom | 女人张开腿给男人桶爽免费 | 亚洲国产情侣一区二区三区 | 一区二区三区国产精品 | 免费一级欧美性大片 | 香蕉视频国产精品 | 成人做爰全过程免费看网站 | 国产精品久久久久久一区二区三区 | 手机在线看a | 久久99国产亚洲高清观看首页 | 在线亚洲精品视频 | 91理论片午午伦夜理片久久 | 河边性xxxxfreexxxxx| 美女扒开腿让男人桶个爽 | 国产一级一级 | 亚洲黄色美女视频 | 欧美亚洲综合网 | 俄罗斯黄色毛片 | 狠狠色噜狠狠狠狠色综合久 | 欧美成人三级视频 | 成人亚洲天堂 | 九九精品激情在线视频 | 亚洲日本va | 精品在线观看一区 | 香蕉久久久 | 男人的天堂在线观看视频不卡 | 欧美成人另类 | 91久久另类重口变态 | 欧美日韩在线播放一区二区三区 | xp123欧美亚洲国产日韩 | 国产精品成人久久久 |