SSH連接的五個階段
1. 版本協商階段(Protocol Version Negotiation)
-
目的:協商使用SSH-1或SSH-2協議(現代系統默認SSH-2)。
-
流程:
-
關鍵點:若版本不兼容(如客戶端只支持SSH-1,服務端僅支持SSH-2),連接立即終止。
2. 算法協商階段(Algorithm Negotiation)
-
目的:協商加密算法、MAC(消息認證碼)、密鑰交換算法等。
-
流程:
-
算法類型:
- 密鑰交換算法:
curve25519-sha256
,ecdh-sha2-nistp256
- 加密算法:
aes256-gcm@openssh.com
,chacha20-poly1305
- MAC算法:
hmac-sha2-256
- 主機密鑰算法:
ssh-ed25519
,ecdsa-sha2-nistp256
- 密鑰交換算法:
3. 認證階段(Authentication)
客戶端需通過服務端驗證,常見方式:密碼認證、公鑰認證。
🔐 密碼認證原理
- 風險:易受暴力破解攻擊,建議啟用失敗次數限制(如
MaxAuthTries 3
)。
🔑 密鑰認證原理
- 優勢:抵御中間人攻擊(依賴主機密鑰)、無需傳輸密碼。
- 關鍵文件:
- 客戶端:
~/.ssh/id_ed25519
(私鑰),~/.ssh/id_ed25519.pub
(公鑰) - 服務端:
~/.ssh/authorized_keys
(存儲已授權的公鑰)
- 客戶端:
4. 會話請求階段(Session Request)
-
目的:建立交互式Shell、SFTP、端口轉發等通道。
-
流程:
-
關鍵請求類型:
shell
:啟動交互式終端subsystem sftp
:啟動SFTP服務tcpip-forward
:請求端口轉發
5. 數據交互階段(Data Exchange)
-
安全通道特性:
- 所有數據通過對稱加密傳輸(如AES-256)
- 每個數據包附加MAC校驗碼防篡改
- 支持壓縮(可選)
-
數據傳輸流程:
認證方式對比總結
特性 | 密碼認證 | 密鑰認證 |
---|---|---|
安全性 | 較低(易受暴力破解) | 高(非對稱加密+簽名) |
便捷性 | 需手動輸入密碼 | 免密碼(可配合ssh-agent) |
防中間人攻擊 | 依賴主機密鑰驗證 | 依賴主機密鑰驗證 |
配置文件 | /etc/ssh/sshd_config | ~/.ssh/authorized_keys |
推薦場景 | 臨時訪問 | 自動化腳本/常連接 |
SSH完整使用指南
一、SSH服務端部署
# 安裝SSH服務
yum -y install openssh openssh-clients# 啟動服務并設置開機自啟
systemctl restart sshd
systemctl enable sshd# 更改用戶登錄選項
vim /etc/ssh/sshd_config
# 把選項更改為yes(Centos7有些為默認開啟)
#PermitRootLogin yes
二、SSH連接基礎
# 基本連接(僅命令行)
ssh username@server_ip# 帶圖形界面轉發(X11 Forwarding)
ssh -X username@server_ip
三、密鑰認證配置流程
具體命令:
# 1. 客戶端生成密鑰(默認RSA算法)
ssh-keygen # 連續回車使用默認設置# 2. 上傳公鑰到服務器(需驗證密碼)
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip# 3. 驗證密鑰登錄(無需密碼)
ssh username@server_ip
四、文件傳輸操作
操作類型 | 命令格式 | 示例 |
---|---|---|
SFTP 交互式傳輸 | sftp user@ip | sftp root@172.25.0.183 |
→ 上傳文件 | put [本地文件] [遠程路徑] | put /local/file /remote/ |
→ 下載文件 | get [遠程文件] [本地路徑] | get /remote/file /local/ |
SCP 直接傳輸 | ||
→ 上傳文件 | scp [本地文件] user@ip:[遠程路徑] | scp /tmp/aa root@172.25.0.183:/var |
→ 下載文件 | scp user@ip:[遠程文件] [本地路徑] | scp root@172.25.0.183:/tmp/cc /var |
📌 路徑記憶口訣:
- 上傳:
本地文件 → 遠程位置
- 下載:
遠程文件 → 本地位置
五、SSH協議核心流程
六、安全增強配置
# 禁用密碼認證(強制密鑰登錄)
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd# 使用更安全的Ed25519算法
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@ip
七、常見問題排查
# 查看詳細連接過程(調試模式)
ssh -vvv user@ip# 檢查公鑰權限(服務端)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys# 驗證端口監聽
ss -tuln | grep :22
💡 最佳實踐:
- 生產環境禁用密碼認證
- 使用
-J
參數配置跳板機訪問內網主機- 定期輪換密鑰(建議每90天)
- 使用
Fail2Ban
防御暴力破解
附:SSH協議棧架構
應用層 (SCP/SFTP/SHELL)|
SSH連接協議 (通道管理)|
用戶認證協議 (密鑰/密碼)|
傳輸層協議 (加密/壓縮)|TCP/IP
使用-J
參數配置跳板機訪問內網主機
- 定期輪換密鑰(建議每90天)
- 使用
Fail2Ban
防御暴力破解
附:SSH協議棧架構
應用層 (SCP/SFTP/SHELL)|
SSH連接協議 (通道管理)|
用戶認證協議 (密鑰/密碼)|
傳輸層協議 (加密/壓縮)|TCP/IP