SSH 是 Linux 下進行遠端連接配接的基本工具。
一般情況下我們可以通過
登入遠端伺服器,如果要管理多台伺服器,這樣太長了。
可以在家目錄的 .ssh 中建立config檔案,設定别名。
比如我的個人雲主機,
# Host 可跟多個表示别名
Host cloud alias
HostName 120.163.xxx.323
User ubuntu
Port 4722
# 私鑰路徑
IdentityFile ~/.ssh/id_rsa
這樣執行
ssh cloud
或
ssh alias
就無密碼登入雲主機了
1. 執行遠端指令
ssh cloud "df -h"
image.png![]()
SSH 技巧
2. 用分号分隔多個指令,用引号引起來
ssh cloud "df -h; ps;"
3. 遇到需要互動的指令,加 -t 參數
$ ssh -t cloud top
比如
sudo
開頭的可能需要使用者輸入密碼,需要 TTY。
添加 -t 參數後,ssh 會保持登入狀态,直到你退出需要互動的指令。
![]()
SSH 技巧
再舉個實際例子:
ssh -t flux sudo -u fueladminprd ssh 192.168.1.100
這句話實際執行了兩步:
- ssh -t flux #登入名為flux的伺服器,因為需要互動式,加上-t
-
sudo -u fueladminprd ssh 192.168.1.100 # 以 fueladminprd 使用者在 flux 上執行 ssh 192.168.1.100
為了安全,flux 就是跳闆機,192.168.1.100 為實際測試伺服器。
4. 執行多行指令
$ ssh cloud "echo 'haha'
> pwd
> ls "
可以用單引号或雙引号開頭,然後寫上幾行指令,最後再用相同的引号來結束。
>
開頭的就是輸入下一行指令
如果需要在指令中使用引号,可以混合使用單雙引号。
![]()
SSH 技巧
5. 在指令中使用變量
在遠端伺服器執行
ls node
,本地定義變量a,傳入到指令中。達到一樣的效果。
在下圖的指令中為 bash 指定了 -c 參數
$ a=node
$ ssh cloud bash -c " '
> ls $a
> ' "
![]()
SSH 技巧
6. 執行本地腳本
本地建立demo.sh,内容是:
ls node
運作
ssh cloud < demo.sh
通過重定向 stdin,本地的腳本 demo.sh 在遠端伺服器上被執行。
![]()
SSH 技巧
7. 為腳本傳入參數
修改 demo.sh 内容為:
ls node
echo $0
echo $1
echo $2
執行
ssh cloud 'bash -s'< demo.sh aa bb cc
bash 就是 $0 第一個參數。
![]()
SSH 技巧