亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何用java程序(JSch)運(yùn)行遠(yuǎn)程linux主機(jī)上的shell腳本

瀏覽:36日期:2022-08-27 13:12:30

運(yùn)行遠(yuǎn)程主機(jī)上的shell腳本

下面的例子是教給大家如何通過(guò)java程序,運(yùn)行遠(yuǎn)程主機(jī)上的shell腳本。(我講的不是一個(gè)黑客學(xué)習(xí)教程,而是使用用戶名密碼去執(zhí)行有用戶認(rèn)證資格的主機(jī)上的shell腳本)。并且通過(guò)java程序獲得shell腳本的輸出。首先通過(guò)maven坐標(biāo)引入JSch依賴庫(kù),我們正是通過(guò)JSch去執(zhí)行遠(yuǎn)程主機(jī)上的腳本。

<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version></dependency>

當(dāng)然以下java代碼可執(zhí)行的的前提是,遠(yuǎn)程主機(jī)已經(jīng)開通SSH服務(wù)(也就是我們平時(shí)登錄主機(jī)所使用的服務(wù))。

遠(yuǎn)程shell腳本

下面的代碼放入一個(gè)文件:hello.sh,腳本的內(nèi)容很簡(jiǎn)單只是用來(lái)測(cè)試,回顯輸出“hello <參數(shù)1> ”

#! /bin/shecho 'hello $1n';

然后我把它放到遠(yuǎn)程主機(jī)的/root目錄下面,遠(yuǎn)程主機(jī)的IP是1.1.1.1(當(dāng)然我真實(shí)測(cè)試時(shí)候不是這個(gè)IP,我不能把我的真實(shí)IP寫到這個(gè)文章里面,以免被攻擊)。并且在遠(yuǎn)程主機(jī)上,為這個(gè)腳本設(shè)置可執(zhí)行權(quán)限,方法如下:

$ chmod +x hello.sh

本地java程序

我們可以使用下面的代碼,去遠(yuǎn)程的linux 主機(jī)執(zhí)行shell腳本,詳細(xì)功能請(qǐng)看代碼注釋

import com.jcraft.jsch.*;import java.io.IOException;import java.io.InputStream;public class RunRemoteScript { //遠(yuǎn)程主機(jī)IP private static final String REMOTE_HOST = '1.1.1.1'; //遠(yuǎn)程主機(jī)用戶名 private static final String USERNAME = ''; //遠(yuǎn)程主機(jī)密碼 private static final String PASSWORD = ''; //SSH服務(wù)端口 private static final int REMOTE_PORT = 22; //會(huì)話超時(shí)時(shí)間 private static final int SESSION_TIMEOUT = 10000; //管道流超時(shí)時(shí)間(執(zhí)行腳本超時(shí)時(shí)間) private static final int CHANNEL_TIMEOUT = 5000; public static void main(String[] args) { //腳本名稱及路徑,與上文要對(duì)上 String remoteShellScript = '/root/hello.sh'; Session jschSession = null; try { JSch jsch = new JSch(); //SSH授信客戶端文件位置,一般是用戶主目錄下的.ssh/known_hosts jsch.setKnownHosts('/home/zimug/.ssh/known_hosts'); jschSession = jsch.getSession(USERNAME, REMOTE_HOST, REMOTE_PORT); // 密碼認(rèn)證 jschSession.setPassword(PASSWORD); // 建立session jschSession.connect(SESSION_TIMEOUT); //建立可執(zhí)行管道 ChannelExec channelExec = (ChannelExec) jschSession.openChannel('exec'); // 執(zhí)行腳本命令'sh /root/hello.sh zimug' channelExec.setCommand('sh ' + remoteShellScript + ' zimug'); // 獲取執(zhí)行腳本可能出現(xiàn)的錯(cuò)誤日志 channelExec.setErrStream(System.err); //腳本執(zhí)行結(jié)果輸出,對(duì)于程序來(lái)說(shuō)是輸入流 InputStream in = channelExec.getInputStream(); // 5 秒執(zhí)行管道超時(shí) channelExec.connect(CHANNEL_TIMEOUT); // 從遠(yuǎn)程主機(jī)讀取輸入流,獲得腳本執(zhí)行結(jié)果 byte[] tmp = new byte[1024]; while (true) {while (in.available() > 0) { int i = in.read(tmp, 0, 1024); if (i < 0) break; //執(zhí)行結(jié)果打印到程序控制臺(tái) System.out.print(new String(tmp, 0, i));}if (channelExec.isClosed()) { if (in.available() > 0) continue; //獲取退出狀態(tài),狀態(tài)0表示腳本被正確執(zhí)行 System.out.println('exit-status: ' + channelExec.getExitStatus()); break;}try { Thread.sleep(1000);} catch (Exception ee) {} } channelExec.disconnect(); } catch (JSchException | IOException e) { e.printStackTrace(); } finally { if (jschSession != null) {jschSession.disconnect(); } } }}

最終在本地控制臺(tái),獲得遠(yuǎn)程主機(jī)上shell腳本的執(zhí)行結(jié)果。如下

hello zimugexit-status: 0

當(dāng)然,我只是為大家演示這樣一個(gè)例子,上面的代碼可以通過(guò)更好的封裝,從而提供更簡(jiǎn)單的使用方式。

以上就是如何用java程序(JSch)運(yùn)行遠(yuǎn)程linux主機(jī)上的shell腳本的詳細(xì)內(nèi)容,更多關(guān)于JAVA運(yùn)行Linux的shell腳本的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产精品成人观看视频网站 | 365深夜福利在线观看 | 在线观看亚洲精品专区 | 国内在线观看精品免费视频 | 特黄特色一级特色大片中文 | a国产成人免费视频 | 污污的网站有哪些呢 | 久久国产精品男女热播 | 精品国产不卡一区二区三区 | xvideos亚洲 | 亚洲免费看片 | 粉嫩国产精品14xxxxx | 国产精品一区二区在线播放 | 精品精品精品 | 久久国产乱子伦精品免费强 | 大尺度做爰视频吃奶www | 伊人色婷婷综在合线亚洲 | 久久精品99无色码中文字幕 | 黄色一级国产 | 伊人骚| 特黄日韩免费一区二区三区 | 日韩啪啪网 | 精品精品国产欧美在线观看 | 日日干夜夜干 | 九九99re在线视频精品免费 | 一级毛片特级毛片黄毛片 | 欧美精品国产第一区二区 | 免费日韩毛片 | 特级黄aaaaaaaaa毛片 | 日本xxxⅹ色视频在线观看网站 | 青草免费观看 | 男人粗大一出一进女人下面视频 | 视频免费1区二区三区 | 欧美日韩在线一区 | 一级黄网 | 国产麻豆精品一区二区 | 中文字幕一精品亚洲无线一区 | 免费人成黄页网站在线观看国产 | 91麻豆网 | 久久精品国产国产精品四凭 | 日韩激情淫片免费看 |