文檔:
- man ssh, ssh_config sshd, sshd_config
簡(jiǎn)介
ssh 為 secure shell 的英文縮寫,是一種加密的網(wǎng)絡(luò)傳輸協(xié)議。常用于登錄遠(yuǎn)程服務(wù)器與在遠(yuǎn)程服務(wù)器上執(zhí)行命令。
SSH 使用客戶端-服務(wù)器模型,標(biāo)準(zhǔn)端口為 22。服務(wù)器端需要開啟 SSH 守護(hù)進(jìn)程接受遠(yuǎn)端的連接,而用戶需要使用 SSH 客戶端與服務(wù)端連接。
最常見的開源實(shí)現(xiàn)是 OpenSSH
基本用法:
登錄:
$ ssh user@host # 如果不指明 user,默認(rèn)使用當(dāng)前用戶。
在遠(yuǎn)程機(jī)器上執(zhí)行 command,把 stdout,stderr 送回來然后斷開連接:
$ ssh user@host [command]
常用參數(shù):
-
-F configfile:指定配置文件,默認(rèn) ssh 會(huì)使用~/.ssh/config中的配置。 -
-p port:指定端口號(hào),默認(rèn)使用標(biāo)準(zhǔn)端口號(hào) 22。
scp 遠(yuǎn)程傳輸文件
scp 是一個(gè)命令行工具,是英文 secure copy 的縮寫,用于在服務(wù)器和客戶端之間傳輸文件,操作類似cp。
使用注意點(diǎn):遠(yuǎn)程主機(jī)名后要加個(gè)冒號(hào)再跟路徑。如:
$ scp <path> <username>@<host>:/home/valleygtc # copy local file -> remote
$ scp <username>@<host>:/path <path> # copy remote file -> local
SSH 免密登錄:
SSH 以非對(duì)稱加密實(shí)現(xiàn)身份驗(yàn)證。身份驗(yàn)證有多種途徑,可以使用密碼來認(rèn)證,也可以通過實(shí)現(xiàn)配置好的密鑰文件來認(rèn)證。
通過密鑰認(rèn)證登錄的條件:
- 公鑰(public key)儲(chǔ)存在服務(wù)端的
~/.ssh/authorized_keys文件中。 - 私鑰(private key)儲(chǔ)存在客戶端的
~/.ssh/id_rsa文件中即可。
我們通常使用 ssh-keygen 這個(gè)工具來生成公鑰和私鑰,如下:
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh # 僅允許自己讀寫此目錄。
$ ssh-keygen -t rsa -b 4096 # RSA 算法。
這會(huì)生成兩個(gè)文件 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub ,前者是私鑰,我們應(yīng)該小心保護(hù),后者是公鑰,應(yīng)當(dāng)將其放到服務(wù)端的 ~/.ssh/authorized_keys 中去,我們可以使用 ssh-copy-id 這個(gè)工具來完成:
$ ssh-copy-id -i .ssh/id_rsa.pub <username>@<host>
或者手動(dòng)將其復(fù)制粘貼過去。
也可以使用如下命令:
$ ssh user@host 'mkdir .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
通過跳板機(jī)來 ssh 連接服務(wù)器
跳板機(jī),又常叫做“Bastion host”。
在企業(yè)中,業(yè)務(wù)服務(wù)器通常有 ip 限制,不允許直接從辦公機(jī)登錄,而是需要先登錄一個(gè)跳板機(jī),通過跳板機(jī)來登錄業(yè)務(wù)服務(wù)器。
這樣做的目的是:隔離內(nèi)部網(wǎng)絡(luò),只允許從跳板機(jī)訪問,那么我們只需要特別關(guān)注跳板機(jī)的安全配置就可以了,便于更好的進(jìn)行安全控制。
我們可以配置 ssh 客戶端,讓 ssh 替我們處理跳板機(jī)的登錄,避免多次輸入命令的負(fù)擔(dān)。
假設(shè)我們有跳板機(jī) jumpserver 和 目標(biāo)服務(wù)器 targetserver。
方法一、使用命令行的 -J 參數(shù)
$ ssh -J user@jumpserver:22 -p 22 root@targetserver
方法二、配置文件:~/.ssh/config
Host targetserver
ProxyJump user@jumpserver:22
然后就可以直接:
$ ssh -p 22 root@targetserver
sshd 安全配置
sshd 的配置文件:/etc/ssh/sshd_config。
我們可以修改 sshd 的默認(rèn)配置來增強(qiáng)系統(tǒng)的安全性,以下是一些需要注意的配置項(xiàng):
Port 22 # sshd 監(jiān)聽端口。我們通常不希望使用 22 這一標(biāo)準(zhǔn)端口,以減少惡意登錄嘗試。
PasswordAuthentication yes|no # 是否允許使用密碼登錄,默認(rèn)為yes。出于安全考慮,最好禁用密碼登錄,僅允許通過密鑰文件的方式登錄,以降低密碼被暴力破解的可能性。