亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SSH如何遠程執行任務

發布時間:2021-08-20 14:30:00 來源:億速云 閱讀:230 作者:小新 欄目:服務器

這篇文章主要介紹SSH如何遠程執行任務,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

遠程執行命令

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

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

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

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

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

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

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

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

SSH如何遠程執行任務

執行需要交互的命令

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

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

SSH如何遠程執行任務

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

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

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

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

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 能輕松搞定!

SSH如何遠程執行任務

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

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

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

SSH如何遠程執行任務

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

SSH如何遠程執行任務

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

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

SSH如何遠程執行任務

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

遠程執行腳本

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

執行本地的腳本

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

ls
pwd

然后運行下面的命令:

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

SSH如何遠程執行任務

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

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

echo $0
echo $1

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

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

下圖顯示了執行的結果:

SSH如何遠程執行任務

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

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

SSH如何遠程執行任務

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

執行遠程服務器上的腳本

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

ls
pwd

執行下面的命令:

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

SSH如何遠程執行任務

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

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

echo $0
echo $1

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

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

SSH如何遠程執行任務

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

以上是“SSH如何遠程執行任務”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ssh
AI

杭锦旗| 陆良县| 璧山县| 望都县| 会东县| 东海县| 台山市| 孙吴县| 白水县| 虎林市| 内乡县| 澜沧| 新郑市| 江口县| 拜泉县| 瑞安市| 博兴县| 筠连县| 息烽县| 保靖县| 浦城县| 鄂托克前旗| 曲周县| 鹿泉市| 措勤县| 修文县| 陈巴尔虎旗| 林西县| 常德市| 临西县| 临湘市| 塔城市| 青阳县| 苗栗市| 南京市| 台东县| 孟津县| 遵义县| 乌恰县| 邢台县| 邢台市|