日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 实操———— Shell 远程执行命令

發(fā)布時間:2025/3/12 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 实操———— Shell 远程执行命令 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引言

目前,開發(fā)人員的部署方式是,將項目打包(Maven 打包) 然后將 生成的 jar 包等文件,通過Xshell 等終端工具手動傳輸?shù)竭h程服務(wù)器上,然后再通過在終端執(zhí)行遠程服務(wù)器上的 shell 腳本來啟動服務(wù)。

本篇博客聚焦這樣一種解決方案,通過在本地(Windows或Mac 系統(tǒng)等)運行 Shell 腳本,使用 scp 命令傳輸,并通過 ssh 命令執(zhí)行遠程服務(wù)器上的指令或腳本,來完成這一系列各種軟件切換、復(fù)制粘貼、啟動運行的操作,達到 “一鍵部署” 的效果。這在前期頻繁更新部署 jar 包到遠程服務(wù)器有很大的效率提升。

一、準(zhǔn)備條件

如果本機是 Windows 系統(tǒng),那么如果希望執(zhí)行 shell 腳本,至少需要安裝一個類似 Xshell 的終端工具,普通的 dos 命令行肯定是不行的。

不過如果有裝過 git ,那么通過Git Bash 來執(zhí)行 Shell 腳本是個不錯的選擇。

另外,文件上傳和遠程執(zhí)行 Shell 腳本需要對 scp 命令、?Shell 命令 、ssh 等命令有一定的了解。

二、文件上傳

一般在主機之間傳輸文件除了使用 SFTP 等協(xié)議外,還會使用 scp 命令,這些協(xié)議都基于 ssh 安全登錄協(xié)議。scp 命令在之前的文章中有簡單介紹過,詳情參考我的《Linux進階之路————scp指令介紹與演示》

于是,我們可以像下面這樣將打包好的 jar 文件通過 scp 命令傳輸?shù)?遠程主機上:

#!/bin/bash ## 通過 scp 命令上傳 scp ../target/demo-0.0.1-SNAPSHOT.jar root@192.168.1.140:~/myapp/

這個格式非常簡單,首先 scp 命令先行,其次是源文件,再然后就是遠程主機的 ip 地址以及存放的位置,其中 ~ 代表用戶的 HOME 目錄,比如 root 用戶的 HOME 目錄就是 /root,tom用戶的 HOME 目錄就是 /home/tom/ 。如果希望傳輸多個文件,可以直接用空格隔開(多個空格沒有關(guān)系),類似這樣:

scp? 文件1? 文件2? 文件3...? ? user@IP:目標(biāo)路徑

其實,完全可以在項目的 classpath 下建立一個專門管理 shell 文件的文件夾,類似這樣:

這樣的話,shell 和 target 下打包出來的 jar 包始終保持相對路徑,就不會因為在不同開發(fā)者主機上的項目位置不同而頻繁修改 shell 中的 jar 包路徑。

三、遠程執(zhí)行 Shell 項目啟動腳本

當(dāng)執(zhí)行完文件上傳命令之后,接下來就是啟動遠程主機的 Shell 腳本,讓服務(wù)啟動。

通常,我們會在遠程服務(wù)器上放置一個配置好固定參數(shù)的啟動腳本,類似這樣:

但每次都需要登錄遠程主機,切換到目標(biāo)位置,再執(zhí)行啟動腳本有些麻煩,于是,我們可以在保留遠程腳本的同時將調(diào)用執(zhí)行的操作放在本地 Windows 主機上。

于是,我們可以在上面的 scp 命令之后,添加 ssh 命令用于執(zhí)行遠程腳本:

#!/bin/bash ## 通過 scp 命令上傳 scp ../target/demo-0.0.1-SNAPSHOT.jar root@192.168.1.140:~/myapp/## 上傳后執(zhí)行啟動腳本 ssh root@192.168.1.140 << bash source /etc/profile cd ~/myapp ./app.sh restart demo-0.0.1-SNAPSHOT.jar bash

我們可以使用 ssh 命令在本地執(zhí)行遠程主機上的命令,包括執(zhí)行 shell 腳本。

其中,"<<" 代表輸入重定向,它的功能可以這樣來描述:

格式:cmd << text

從命令行讀取輸入,直到一個與text 相同的行結(jié)束。text 是自定義的文本,可以是任何字符串,那么 text 與 text 之間的全部內(nèi)容,都會被當(dāng)做輸入的參數(shù),并被輸入到 << 左邊的指令中。

于是,紅框內(nèi)的部分就是我們要執(zhí)行的 Shell 調(diào)用的具體命令(由于我的Eclipse安裝了 shell編輯插件,<< 的部分會被灰色處理):

值得一提的是,在真正執(zhí)行遠程 app.sh 腳本之前,需要執(zhí)行 source /etc/profile? 命令,這在我的《Linux 實操———CentOS 6 安裝配置 Oracle JDK 1.8》和《Linux進階之路———Shell 編程入門》中都有說明,意思就是刷新環(huán)境變量。這是因為遠程連接的情況下不會自動加載環(huán)境變量,因此,如果你調(diào)用的遠程腳本中存在類似 java 的環(huán)境變量的命令,就會報 command not found 錯誤。因此只要在執(zhí)行腳本之前刷新環(huán)境變量就可以了。

另外,遠程的輸出會被傳回到本地的 Git Bash 窗口,如果希望將輸出保存到遠程的 nohup.out 文件中,需要添加 >> 重定向:

當(dāng)加入輸出重定向后,服務(wù)端的輸出就會保留在nohup.out 中,而 Git Bash 也不會有任何輸出內(nèi)容,從而安靜的執(zhí)行完腳本并返回。下面第四節(jié)采用了非重定向的方式,可以根據(jù)實際情況酌情考慮。

本博客暫未做.log 日志文件的輸出檢查,如果對是否會影響每天日志保存的情況,還有待進一步驗證。未來驗證后會追加這個問題。?

四、遠程傳輸并啟動項目

到此為止,通過本地的 deploy.sh ,我們就有足夠的能力傳輸 jar 包并啟動遠程服務(wù)(deploy.sh—>app.sh—>啟動服務(wù)),接下來我們實際演示一下,看看能否成功。

當(dāng)然,Eclipse 貌似也有執(zhí)行 bash 的插件。這里由于操作比較簡單,我們可以通過 Eclipse 編輯完 Shell 后在系統(tǒng)盤中打開,然后通過 Git Bash 來執(zhí)行,方法是選中文件,右鍵——>Show In——>System Explorer:

然后在打開的資源管理器中右鍵空白,選擇 Git Bash:

最后執(zhí)行腳本:

我們可以看到遠程服務(wù)的日志輸出(如果是重定向到遠程文件,例如 ">> nohup.out",就會在遠程服務(wù)器上保留輸出),這更加方便了我們判斷是否啟動成功,當(dāng)看到啟動成功后,將Git Bash 關(guān)閉即可。這并不會影響遠程服務(wù)。

我們來檢查一下,服務(wù)的訪問,以及遠程服務(wù)器上的資源情況,應(yīng)該是都沒有問題的:

值得一提的是,在scp 和 ssh 執(zhí)行部署工作的時候,需要兩次交互式的輸入密碼(scp 一次,ssh 一次),密碼是不可見的,如果你的密碼非常長,建議復(fù)制粘貼。

雖然腳本已經(jīng)足夠簡化文件上傳和啟動的操作,但是依然不能避免輸入密碼的痛苦。

還有一種方式是使用 rsa 公私鑰來解決免密操作的方式,但是如果是多開發(fā)者的話,就需要為每臺開發(fā)者機器配置公私鑰,這就極大地增加了前期的部署工作和操作難度,但如果大家每次都復(fù)制粘貼密碼的話好像也會使密碼漸漸變得不那么安全,容易泄露。另外有一種支持非交互式免密的方式是 sshpass ,它可以在ssh 之前通過 -P "password" 指定登錄密碼, 不過這東西貌似在 Git Bash 上不支持,甚至在 CentOS 6 上也找不到y(tǒng)um 安裝,比較難搞。

總之,目前我還沒有找到比較好的權(quán)宜之計,所以,暫且就復(fù)制粘貼吧,其實已經(jīng)足夠簡單了。

參考與鳴謝

Linux Shell遠程執(zhí)行命令(命令行與腳本方式)

linux shell 遠程執(zhí)行命令

linux:shell腳本中一些特殊符號

linux幾種文件傳輸方式

ssh登錄時在參數(shù)中加入密碼的解決方案

?

總結(jié)

以上是生活随笔為你收集整理的Linux 实操———— Shell 远程执行命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。