當前位置:
首頁 > 知識 > SSH遠程執行任務

SSH遠程執行任務

SSH是Linux下進行遠程連接的基本工具,但是如果僅僅用它來登錄那可是太浪費啦!SSH命令可是完成遠程操作的神器啊,藉助它我們可以把很多的遠程操作自動化掉!下面就對SSH的遠程操作功能進行一個小小的總結。

遠程執行命令

如果我們要查看一下某台主機的磁碟使用情況,是不是必須要登錄到目標主機上才能執行df命令呢?當然不是的,我們可以使用ssh命令在遠程的主機上執行df命令,然後直接把結果顯示出來。整個過程就像是在本地執行了一條命令一樣:

那麼如何一次執行多條命令呢?其實也很簡單,使用分號把不同的命令隔起來就OK了:

第一條命令返回的結果:/home/nick

這說明用這種方式執行命令時的當前目錄就是登錄用戶的家目錄。

第二條命令返回hello.txt文件的內容。

注意,當命令多於一個時最好用引號括起來,否則在有的系統中除了第一個命令,其它都是在本地執行的。

執行需要交互的命令

有時候我們需要遠程執行一些有交互操作的命令。

這兩條命令雖然提示的失敗原因不同,但它們有一個共同點:都需要與用戶交互(需要TTY)。

所以它們失敗的原因也是相同的:

默認情況下,當你執行不帶命令的ssh連接時,會為你分配一個TTY。因為此時你應該是想要運行一個shell會話。

但是當你通過ssh在遠程主機上執行命令時,並不會為這個遠程會話分配TTY。此時ssh會立即退出遠程主機,所以需要交互的命令也隨之結束。

好在我們可以通過-t參數顯式的告訴ssh,我們需要一個 TTY遠程shell進行交互!

添加-t參數後,ssh會保持登錄狀態,直到你退出需要交互的命令。

作為總結,我們看看-t參數的官方解釋:

"Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty."

好吧,更強悍的是我們居然可以指定多個-t參數!

執行多行的命令

有時候我們可能需要隨手寫幾行簡單的邏輯,這也沒有問題,ssh能輕鬆搞定!

你可以用單引號或雙引號開頭,然後寫上幾行命令,最後再用相同的引號來結束。

那麼如果需要在命令中使用引號該怎麼辦?

其實針對類似的情況有一條比較通用的規則,就是混合使用單雙引號。這條規則在這裡也是適用的:

當我們在命令中引用了變數時會怎麼樣呢?

請注意上圖中的最後一行,並沒有輸出我們期望的 nick。這裡多少有些詭異,因為如果變數沒有被解釋的話,輸出的應該是$name才對。但是這裡卻什麼都沒有輸出。

對於引用變數的寫法,可以通過下面的方式保證變數被正確解釋:

注意,我們在上圖的命令中為bash指定了-c參數。

遠程執行腳本

對於要完成一些複雜功能的場景,如果是僅僅能執行幾個命令的話,簡直是弱爆了。我們可能需要寫長篇累牘的shell腳本去完成某項使命!此時SSH依然是不辱使命的好幫手(哈哈,前面的內容僅僅是開胃菜啊!)。

執行本地的腳本

我們在本地創建一個腳本文件test.sh,內容為:

然後運行下面的命令:

通過重定向stdin,本地的腳本test.sh在遠程伺服器上被執行。

接下來我們我期望能為腳本test.sh傳遞一個參數,為了驗證傳入的參數,在test.sh文件的末尾添加兩行:

然後嘗試執行下面的命令:

下圖顯示了執行的結果:

看來上面的方法都無法為腳本傳遞參數。

要想在這種情況下(遠程執行本地的腳本)執行帶有參數的腳本,需要為bash指定-s參數:

在上圖的最後兩行,輸出的是"bash"和"helloworld" 分別對應$0和$1。

執行遠程伺服器上的腳本

除了執行本地的腳本,還有一種情況是腳本文件存放在遠程伺服器上,而我們需要遠程的執行它!

此時在遠程伺服器上用戶nick的家目錄中有一個腳本test.sh。文件的內容如下:

執行下面的命令:

注意,此時需要指定腳本的絕對路徑!

下面我們也嘗試為腳本傳遞參數。在遠程主機上的test.sh文件的末尾添加兩行:

然後嘗試執行下面的命令:

真棒,最後兩行"/home/nick/test.sh"和"helloworld"分別對應$0和$1。

總結

本文通過demo演示了ssh遠程操作的基本方式。這些基本用法將為我們在更複雜的場景中完成各種艱巨的任務打下基礎。

文章來源:

http://www.cnblogs.com/sparkdev/p/6842805.html

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 優才學院 的精彩文章:

阿里雲實現流媒體直播demo
SEO基礎:如何快速優化你的網站搜索排名
少年猿們的夏令營
致老爸老媽:這個暑假,我要學編程
2017年8道PHP面試題

TAG:優才學院 |

您可能感興趣

域滲透——利用GPO中的計劃任務實現遠程執行
EOS 節點執行遠程代碼漏洞
LRASM遠程反艦導彈
注意!NSA逆向工程工具存在遠程代碼執行漏洞
SQL Server服務遠程過程調用失敗解決
內網漫遊:通過RDP劫持向遠程系統執行任意代碼
Sony IPELA E 系列網路攝像頭遠程命令執行漏洞預警
通過Edge瀏覽器遠程代碼執行PoC發布
華碩路由器AsusWRT區域網內未授權遠程代碼執行漏洞
EOS節點遠程代碼執行漏洞—EOS智能合約WASM函數表數組越界
黑客公開谷歌 Edge 瀏覽器的遠程執行 POC
IBM安全信息和事件管理產品QRadar曝遠程命令執行漏洞
在 CentOS 下安裝遠程控制軟體
PNAS重磅!研究人員開發出可以遠程控制的CAR-T細胞免疫治療系統!
小白都能看懂的JSON反序列化遠程命令執行
思科IOS多個遠程代碼執行漏洞
NEP Hub,IP構架的遠程電視製作中心
勒索軟體攻擊 HPE iLO 遠程管理界面
洛馬公布LRASM「遠程反艦無人導彈艇」概念
EvilOSX:一款功能強大的macOS遠程管理工具(RAT)