欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解SSH 遠程執(zhí)行任務(wù)的方法

 更新時間:2017年12月26日 10:26:02   作者:sparkdev  
本篇文章主要介紹了詳解SSH 遠程執(zhí)行任務(wù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

遠程執(zhí)行命令

如果我們要查看一下某臺主機的磁盤使用情況,是不是必須要登錄到目標(biāo)主機上才能執(zhí)行 df 命令呢?當(dāng)然不是的,我們可以使用 ssh 命令在遠程的主機上執(zhí)行 df 命令,然后直接把結(jié)果顯示出來。整個過程就像是在本地執(zhí)行了一條命令一樣:

$ ssh nick@xxx.xxx.xxx.xxx "df -h"

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

$ ssh nick@xxx.xxx.xxx.xxx "pwd; cat hello.txt"

第一條命令返回的結(jié)果: /home/nick

這說明用這種方式執(zhí)行命令時的當(dāng)前目錄就是登陸用戶的家目錄。

第二條命令返回 hello.txt 文件的內(nèi)容。

注意,當(dāng)命令多于一個時最好用引號括起來,否則在有的系統(tǒng)中除了第一個命令,其它都是在本地執(zhí)行的。

執(zhí)行需要交互的命令

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

$ ssh nick@xxx.xxx.xxx.xxx "sudo ls /root"
$ ssh nick@xxx.xxx.xxx.xxx "top"

這兩條命令雖然提示的失敗原因不同,但它們有一個共同點:都需要與用戶交互(需要 TTY)。所以它們失敗的原因也是相同的:
默認情況下,當(dāng)你執(zhí)行不帶命令的 ssh 連接時,會為你分配一個 TTY。因為此時你應(yīng)該是想要運行一個 shell 會話。

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

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

添加 -t 參數(shù)后,ssh 會保持登錄狀態(tài),直到你退出需要交互的命令。

作為總結(jié),我們看看 -t 參數(shù)的官方解釋:

"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 參數(shù)!

執(zhí)行多行的命令

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

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

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

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

當(dāng)我們在命令中引用了變量時會怎么樣呢?

請注意上圖中的最后一行,并沒有輸出我們期望的 nick。這里多少有些詭異,因為如果變量沒有被解釋的話,輸出的應(yīng)該是 $name 才對。但是這里卻什么都沒有輸出。

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

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

遠程執(zhí)行腳本

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

執(zhí)行本地的腳本

我們在本地創(chuàng)建一個腳本文件 test.sh,內(nèi)容為:

ls
pwd

然后運行下面的命令:

$ ssh nick@xxx.xxx.xxx.xxx < test.sh

通過重定向 stdin,本地的腳本 test.sh 在遠程服務(wù)器上被執(zhí)行。

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

echo $0
echo $1

然后嘗試執(zhí)行下面的命令:

$ ssh nick@xxx.xxx.xxx.xxx < test.sh helloworld
$ ssh nick@xxx.xxx.xxx.xxx < "test.sh helloworld"

下圖顯示了執(zhí)行的結(jié)果:

看來上面的方法都無法為腳本傳遞參數(shù)。
要想在這種情況下(遠程執(zhí)行本地的腳本)執(zhí)行帶有參數(shù)的腳本,需要為 bash 指定 -s 參數(shù):

$ ssh nick@xxx.xxx.xxx.xxx 'bash -s' < test.sh helloworld

在上圖的最后兩行,輸出的是 "bash" 和 "helloworld" 分別對應(yīng) $0 和 $1。

執(zhí)行遠程服務(wù)器上的腳本

除了執(zhí)行本地的腳本,還有一種情況是腳本文件存放在遠程服務(wù)器上,而我們需要遠程的執(zhí)行它!
此時在遠程服務(wù)器上用戶 nick 的家目錄中有一個腳本 test.sh。文件的內(nèi)容如下:

ls
pwd

執(zhí)行下面的命令:

$ ssh nick@xxx.xxx.xxx.xxx "/home/nick/test.sh"

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

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

echo $0
echo $1

然后嘗試執(zhí)行下面的命令:

$ ssh nick@xxx.xxx.xxx.xxx /home/nick/test.sh helloworld

真棒,最后兩行 "/home/nick/test.sh" 和 "helloworld" 分別對應(yīng) $0 和 $1。

總結(jié)

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Ubuntu 16.04設(shè)置固定IP的方法教程

    基于Ubuntu 16.04設(shè)置固定IP的方法教程

    這篇文章主要給大家介紹了基于Ubuntu 16.04設(shè)置固定IP的方法教程,文中通過圖文以及示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • linux ss命令詳解

    linux ss命令詳解

    這篇文章主要介紹了linux ss命令詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • CentOS 7中Nginx日志定時拆分實現(xiàn)過程詳解

    CentOS 7中Nginx日志定時拆分實現(xiàn)過程詳解

    這篇文章主要介紹了CentOS 7中Nginx日志定時拆分實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Linux中各個目錄的作用與內(nèi)容

    Linux中各個目錄的作用與內(nèi)容

    這篇文章介紹了Linux中各個目錄的作用與內(nèi)容,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Linux中對MySQL優(yōu)化實例詳解

    Linux中對MySQL優(yōu)化實例詳解

    這篇文章主要介紹了Linux中對MySQL優(yōu)化實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • linux服務(wù)器校對時間方法命令詳解

    linux服務(wù)器校對時間方法命令詳解

    Linux中有個ntp包可以自動校準時間,并且非常好用,這篇文章主要介紹了linux服務(wù)器校對時間方法,需要的朋友可以參考下
    2022-08-08
  • 使用Xshell建立連接并操縱服務(wù)器的方法

    使用Xshell建立連接并操縱服務(wù)器的方法

    Xshell對于開發(fā)人員來說是一款不可或缺的工具,它可以簡單快捷地訪問遠端不同系統(tǒng)的服務(wù)器,以達到遠程控制終端的目的,本文小編就為大家演示如何使用Xshell建立一個連接并操縱服務(wù)器,需要的朋友可以參考下
    2022-10-10
  • Linux tee命令使用詳解

    Linux tee命令使用詳解

    這篇文章主要介紹了Linux tee命令使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Linux 4.9內(nèi)核正式發(fā)布!來看看更新了什么?

    Linux 4.9內(nèi)核正式發(fā)布!來看看更新了什么?

    Linus Torvalds 在 2016年12月11日發(fā)布了Linux內(nèi)核4.9的正式版本,這次主要帶來了一些新的功能和一些驅(qū)動更新,當(dāng)然,還有一些底層的改進。想要看看詳細的介紹,下面來通過這篇文章來一起看看吧。
    2016-12-12
  • Linux cut 命令詳解

    Linux cut 命令詳解

    我們可以使用 cut 命令從一行字符串中于以字節(jié),字符,字段(分隔符)等單位截取一部分內(nèi)容出來。這篇文章主要介紹了Linux cut 命令的相關(guān)知識,需要的朋友可以參考下
    2020-07-07

最新評論