SSH 是 Linux 下進行遠(yuǎn)程連接的基本工具。
一般情況下我們可以通過 ssh username@xxx.xxx.xxx.xxx 登錄遠(yuǎn)程服務(wù)器,如果要管理多臺服務(wù)器,這樣太長了。
可以在家目錄的 .ssh 中新建config文件,設(shè)置別名。
比如我有一臺個人的云主機。IP是120.163.163.163,端口是4722(一般都是22,這里為了安全我改為了其他),登錄用戶名是ubuntu,登錄方式是證書登錄。
# Host 可跟多個表示別名
Host cloud alias
HostName 120.163.163.163
User ubuntu
Port 4722
# 私鑰路徑
IdentityFile ~/.ssh/id_rsa
這樣執(zhí)行 ssh cloud 或 ssh alias 就無密碼登錄云主機了
1. 執(zhí)行遠(yuǎn)程命令
ssh cloud "df -h"
image.png
2. 用分號分隔多個命令,用引號引起來
ssh cloud "df -h; ps;"
3. 遇到需要交互的命令,加 -t 參數(shù)
$ ssh -t cloud top
比如 sudo 開頭的可能需要用戶輸入密碼,需要 TTY。
添加 -t 參數(shù)后,ssh 會保持登錄狀態(tài),直到你退出需要交互的命令。
image.png
再舉個實際例子:
ssh -t flux sudo -u fueladminprd ssh 192.168.1.100
這句話實際執(zhí)行了兩步:
- ssh -t flux #登錄名為flux的服務(wù)器,因為需要交互式,加上-t
- sudo -u fueladminprd ssh 192.168.1.100 # 以 fueladminprd 用戶在 flux 上執(zhí)行 ssh 192.168.1.100
為了安全,flux 就是跳板機,192.168.1.100 為實際測試服務(wù)器。
4. 執(zhí)行多行命令
$ ssh cloud "echo 'haha'
> pwd
> ls "
可以用單引號或雙引號開頭,然后寫上幾行命令,最后再用相同的引號來結(jié)束。
> 開頭的就是輸入下一行命令
如果需要在命令中使用引號,可以混合使用單雙引號。
image.png
5. 在命令中使用變量
在遠(yuǎn)程服務(wù)器執(zhí)行 ls node,本地定義變量a,傳入到命令中。達(dá)到一樣的效果。
在下圖的命令中為 bash 指定了 -c 參數(shù)
$ a=node
$ ssh cloud bash -c " '
> ls $a
> ' "
image.png
6. 執(zhí)行本地腳本
本地創(chuàng)建demo.sh,內(nèi)容是:ls node
運行 ssh cloud < demo.sh
通過重定向 stdin,本地的腳本 demo.sh 在遠(yuǎn)程服務(wù)器上被執(zhí)行。
image.png
7. 為腳本傳入?yún)?shù)
修改 demo.sh 內(nèi)容為:
ls node
echo $0
echo $1
echo $2
執(zhí)行 ssh cloud 'bash -s'< demo.sh aa bb cc
bash 就是 $0 第一個參數(shù)。
image.png
想查看更多配置,打
man ssh_config
參考:
http://www.openssh.com/
https://www.cnblogs.com/sparkdev/p/6842805.html
https://www.zcfy.cc/article/top-20-openssh-server-best-security-practices





