SSH 是 Linux 下進(jìn)行遠(yuǎn)程連接的基本工具级遭。
一般情況下我們可以通過(guò) ssh username@xxx.xxx.xxx.xxx
登錄遠(yuǎn)程服務(wù)器稚矿,如果要管理多臺(tái)服務(wù)器滑绒,這樣太長(zhǎng)了捻勉。
可以在家目錄的 .ssh 中新建config文件,設(shè)置別名虹茶。
比如我有一臺(tái)個(gè)人的云主機(jī)逝薪。IP是120.163.163.163,端口是4722(一般都是22蝴罪,這里為了安全我改為了其他)董济,登錄用戶名是ubuntu,登錄方式是證書(shū)登錄要门。
# Host 可跟多個(gè)表示別名
Host cloud alias
HostName 120.163.163.163
User ubuntu
Port 4722
# 私鑰路徑
IdentityFile ~/.ssh/id_rsa
這樣執(zhí)行 ssh cloud
或 ssh alias
就無(wú)密碼登錄云主機(jī)了
1. 執(zhí)行遠(yuǎn)程命令
ssh cloud "df -h"
2. 用分號(hào)分隔多個(gè)命令虏肾,用引號(hào)引起來(lái)
ssh cloud "df -h; ps;"
3. 遇到需要交互的命令廓啊,加 -t 參數(shù)
$ ssh -t cloud top
比如 sudo
開(kāi)頭的可能需要用戶輸入密碼,需要 TTY询微。
添加 -t 參數(shù)后崖瞭,ssh 會(huì)保持登錄狀態(tài),直到你退出需要交互的命令撑毛。
再舉個(gè)實(shí)際例子:
ssh -t flux sudo -u fueladminprd ssh 192.168.1.100
這句話實(shí)際執(zhí)行了兩步:
- ssh -t flux #登錄名為flux的服務(wù)器,因?yàn)樾枰换ナ竭罅欤由?t
- sudo -u fueladminprd ssh 192.168.1.100 # 以 fueladminprd 用戶在 flux 上執(zhí)行 ssh 192.168.1.100
為了安全藻雌,flux 就是跳板機(jī),192.168.1.100 為實(shí)際測(cè)試服務(wù)器斩个。
4. 執(zhí)行多行命令
$ ssh cloud "echo 'haha'
> pwd
> ls "
可以用單引號(hào)或雙引號(hào)開(kāi)頭胯杭,然后寫(xiě)上幾行命令,最后再用相同的引號(hào)來(lái)結(jié)束受啥。
>
開(kāi)頭的就是輸入下一行命令
如果需要在命令中使用引號(hào)做个,可以混合使用單雙引號(hào)。
5. 在命令中使用變量
在遠(yuǎn)程服務(wù)器執(zhí)行 ls node
滚局,本地定義變量a居暖,傳入到命令中。達(dá)到一樣的效果藤肢。
在下圖的命令中為 bash 指定了 -c 參數(shù)
$ a=node
$ ssh cloud bash -c " '
> ls $a
> ' "
6. 執(zhí)行本地腳本
本地創(chuàng)建demo.sh太闺,內(nèi)容是:ls node
運(yùn)行 ssh cloud < demo.sh
通過(guò)重定向 stdin,本地的腳本 demo.sh 在遠(yuǎn)程服務(wù)器上被執(zhí)行嘁圈。
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 第一個(gè)參數(shù)省骂。
想查看更多配置,打
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