ssh應(yīng)用- linux服務(wù)器A登陸linux服務(wù)器B
服務(wù)器命令
實(shí)際背景在日常工作中,大家難免會(huì)遇到這樣一種情況,就是我需要先登陸一臺(tái)linux服務(wù)器A,然后從A登陸到另一臺(tái)linux服務(wù)器B.
這么設(shè)計(jì)的目的一般都是出于安全的考慮,將可以線下直接訪問(wèn)的服務(wù)器和提供服務(wù)的服務(wù)器隔離開(kāi),同時(shí)也能防范一些攻擊.但是這種設(shè)計(jì)對(duì)于正常使用也會(huì)帶來(lái)一些麻煩,因此期望某些設(shè)計(jì)能夠幫助我們更方便的使用.
ssh命令行直接登陸假設(shè)我們命令終端可以訪問(wèn)到的機(jī)器是A,也就代表A是能夠被公司內(nèi)網(wǎng)訪問(wèn)到,我們的目標(biāo)服務(wù)器是B,那么我們可以在服務(wù)器A上提供一個(gè)web服務(wù),然后通過(guò)接口的方式直接訪問(wèn)B服務(wù)器的內(nèi)容,具體思路如下:
核心思路:
在服務(wù)器A上可以通過(guò)ssh命令直接登陸到服務(wù)器B上,那么就可以直接通過(guò)命令行的形式直接在B服務(wù)器執(zhí)行相應(yīng)命令.
在A服務(wù)器執(zhí)行如下命令:
sshB服務(wù)器名"具體命令"復(fù)制代碼
注意:具體命令是被包括在雙引號(hào)中,如果命令中還有單雙引號(hào)或者/等特殊符號(hào),一定要注意轉(zhuǎn)義
java代碼如下:
StringcmdArray=newString{"/bin/sh","-c",finalCmd};process=Runtime.getRuntime.exec;復(fù)制代碼
正常的返回可以通過(guò)process.getInputStream得到
異常信息的返回可以通過(guò)process.getErrorStream得到
優(yōu)點(diǎn)
你在A服務(wù)器ssh登陸B(tài)服務(wù)器后,能正常執(zhí)行的命令,按道理都可以通過(guò)這種方式用java代碼實(shí)現(xiàn),驗(yàn)證起來(lái)十分方便
開(kāi)發(fā)簡(jiǎn)單,輸入返回都可以由你的服務(wù)進(jìn)行一定程度的控制和處理
可以自動(dòng)加載目標(biāo)服務(wù)器上的環(huán)境變量.
缺點(diǎn)
部分命令可能需要跟終端有所交互,通過(guò)這種方式會(huì)導(dǎo)致無(wú)法正常返回,需要特別處理
每一次請(qǐng)求代表一個(gè)命令,代表新建一條ssh咨詢客服
利用jsch工具建立咨詢客服核心思路沒(méi)有什么變化,只不過(guò)在建立連接和執(zhí)行命令的時(shí)候是通過(guò)jsch包提供的功能
maven依賴
復(fù)制代碼 com.jcraft jsch 0.1.53
java代碼實(shí)現(xiàn)如下
publicvoidjschthrowsJSchException,IOException{Liststdout=newArrayList<>;JSchjsch=newJSch;Sessionsession=jsch.getSession;session.setPassword;session.connect;//打開(kāi)通道,設(shè)置通道類型,和執(zhí)行的命令Channelchannel=session.openChannel;ChannelExecchannelExec=channel;channelExec.setCommand;channelExec.setInputStream;BufferedReaderinput=newBufferedReader));channelExec.connect;//接收遠(yuǎn)程服務(wù)器執(zhí)行命令的結(jié)果Stringline;while)!=null){stdout.add;}input.close;//關(guān)閉通道channelExec.disconnect;//關(guān)閉sessionsession.disconnect;LOGGER.info);}復(fù)制代碼
優(yōu)點(diǎn)
ssh連接可以通過(guò)工具保持,適合命令頻繁執(zhí)行的情況,可以減少不必要的ssh咨詢客服
各種api接口功能比較齊全,復(fù)雜度不高
支持拉取服務(wù)器文件
缺點(diǎn)
在認(rèn)證方面有一些坑,需要根據(jù)遇見(jiàn)的情況自己填一下
執(zhí)行時(shí)無(wú)法獲取到目標(biāo)服務(wù)器的環(huán)境變量,因此執(zhí)行命令的時(shí)候需要用命令的全路徑.例如xxxx/xxx/xxx/bin/java-jar,直接使用java-jar是不行的,可以通過(guò)type命令獲得命令的路徑
文章分類
Tags:服務(wù)器命令,ssh應(yīng)用- linux服務(wù)器A登陸linux服務(wù)器B
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。