本篇文章為大家展示了Java中怎么遠(yuǎn)程調(diào)用Shell腳本,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
10年積累的網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有圖木舒克免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
1、添加依賴
2、Api說明
首先構(gòu)造一個(gè)連接器,傳入一個(gè)需要登陸的ip地址;
Connection conn = new Connection(ipAddr);
模擬登陸目的服務(wù)器,傳入用戶名和密碼;
boolean isAuthenticated = conn.authenticateWithPassword(userName, passWord);
它會返回一個(gè)布爾值,true 代表成功登陸目的服務(wù)器,否則登陸失敗。
打開一個(gè)session,執(zhí)行你需要的linux 腳本命令;
Session session = conn.openSession();session.execCommand(“ifconfig”);
接收目標(biāo)服務(wù)器上的控制臺返回結(jié)果,讀取br中的內(nèi)容;
InputStream stdout = new StreamGobbler(session.getStdout());BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
得到腳本運(yùn)行成功與否的標(biāo)志 :0-成功 非0-失敗
System.out.println(“ExitCode: ” + session.getExitStatus());
關(guān)閉session和connection
session.close();conn.close();
Tips:
通過第二部認(rèn)證成功后當(dāng)前目錄就位于/home/username/
目錄之下,你可以指定腳本文件所在的絕對路徑,或者通過cd導(dǎo)航到腳本文件所在的目錄,然后傳遞執(zhí)行腳本所需要的參數(shù),完成腳本調(diào)用執(zhí)行。執(zhí)行腳本以后,可以獲取腳本執(zhí)行的結(jié)果文本,需要對這些文本進(jìn)行正確編碼后返回給客戶端,避免亂碼產(chǎn)生。如果你需要執(zhí)行多個(gè)linux控制臺腳本,比如第一個(gè)腳本的返回結(jié)果是第二個(gè)腳本的入?yún)?,你必須打開多個(gè)Session,也就是多次調(diào)用 Session sess = conn.openSession();,
使用完畢記得關(guān)閉就可以了。
3. 實(shí)例:工具類
public class SSHTool { private Connection conn; private String ipAddr; private Charset charset = StandardCharsets.UTF_8; private String userName; private String password; public SSHTool(String ipAddr, String userName, String password, Charset charset) { this.ipAddr = ipAddr; this.userName = userName; this.password = password; if (charset != null) { this.charset = charset; } } /** * 登錄遠(yuǎn)程Linux主機(jī) * * @return 是否登錄成功 */ private boolean login() { conn = new Connection(ipAddr); try { // 連接 conn.connect(); // 認(rèn)證 return conn.authenticateWithPassword(userName, password); } catch (IOException e) { e.printStackTrace(); return false; } } /** * 執(zhí)行Shell腳本或命令 * * @param cmds 命令行序列 * @return 腳本輸出結(jié)果 */ public StringBuilder exec(String cmds) throws IOException { InputStream in = null; StringBuilder result = new StringBuilder(); try { if (this.login()) { // 打開一個(gè)會話 Session session = conn.openSession(); session.execCommand(cmds); in = session.getStdout(); result = this.processStdout(in, this.charset); conn.close(); } } finally { if (null != in) { in.close(); } } return result; } /** * 解析流獲取字符串信息 * * @param in 輸入流對象 * @param charset 字符集 * @return 腳本輸出結(jié)果 */ public StringBuilder processStdout(InputStream in, Charset charset) throws FileNotFoundException { byte[] buf = new byte[1024]; StringBuilder sb = new StringBuilder();// OutputStream os = new FileOutputStream("./data.txt"); try { int length; while ((length = in.read(buf)) != -1) {// os.write(buf, 0, c); sb.append(new String(buf, 0, length)); } } catch (IOException e) { e.printStackTrace(); } return sb; } public static void main(String[] args) throws IOException { SSHTool tool = new SSHTool("192.168.100.40", "root", "123456", StandardCharsets.UTF_8); StringBuilder exec = tool.exec("bash /root/test12345.sh"); System.out.println(exec); }}
上述內(nèi)容就是Java中怎么遠(yuǎn)程調(diào)用Shell腳本,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。