一、/etc/ssh/sshd_config
配置機制
1. 配置文件基礎
-
文件作用
OpenSSH 服務器 (sshd
) 的主配置文件,控制連接、認證、端口轉發等行為。 -
加載與生效
- 修改后需重啟服務:
sudo systemctl restart sshd # Systemd 系統 sudo service ssh restart # SysVinit 系統
- 檢查語法錯誤:
sudo sshd -t
- 修改后需重啟服務:
-
語法規則
- 每行一個參數,格式
參數名 值
(如Port 22
) #
開頭為注釋,默認配置通常被注釋作為參考- 參數名區分大小寫(全大寫或駝峰式)
- 每行一個參數,格式
二、核心參數詳解與配置
1. 連接控制
參數 | 說明 | 推薦值 |
---|---|---|
Port 22 | SSH 監聽端口,多端口可寫多行 | 非默認端口(如 2222 ) |
ListenAddress | 綁定 IP,0.0.0.0 監聽所有接口 | 內網 IP(如 192.168.1.1 ) |
MaxStartups | 并發未認證連接數,格式 起始:拒絕率:最大 | 10:30:100 |
MaxSessions | 單連接允許的會話數 | 5-10 |
2. 安全認證
參數 | 說明 | 推薦值 |
---|---|---|
PermitRootLogin | 禁止 root 直接登錄 | no 或 prohibit-password |
PasswordAuthentication | 禁用密碼登錄,強制密鑰認證 | no |
AllowUsers | 用戶白名單(支持 user@ip 格式) | 限制必要用戶 |
UseDNS | 禁用反向解析加速登錄 | no |
3. 功能與轉發
參數 | 說明 | 推薦值 |
---|---|---|
AllowTcpForwarding | 禁止端口轉發減少風險 | no |
X11Forwarding | 啟用圖形界面轉發 | yes |
GatewayPorts | 遠程轉發綁定到 0.0.0.0 | no |
4. 會話與日志
參數 | 說明 | 推薦值 |
---|---|---|
TCPKeepAlive | 啟用 TCP 層保活機制 | yes |
LogLevel | 日志詳細程度 | INFO |
PrintMotd | 禁用登錄后 MOTD 信息 | no |
三、SSH 會話長時間保活配置
1. 服務端配置 (sshd_config
)
# 保活探針(服務端主動檢測)
ClientAliveInterval 60 # 每 60 秒發送保活包
ClientAliveCountMax 7200 # 允許 7200 次無響應(約 5 天)
TCPKeepAlive yes # 啟用 TCP 保活# 系統級 TCP 調優(/etc/sysctl.conf)
net.ipv4.tcp_keepalive_time = 300 # 空閑 300 秒后檢測
net.ipv4.tcp_keepalive_intvl = 60 # 檢測間隔 60 秒
net.ipv4.tcp_keepalive_probes = 5 # 檢測 5 次后斷開
2. 客戶端配置 (~/.ssh/config
)
Host *ServerAliveInterval 30 # 客戶端每 30 秒發送保活包ServerAliveCountMax 0 # 無限次重試ControlMaster auto # 連接復用ControlPath ~/.ssh/control-%r@%h:%pControlPersist 1h # 保持連接池 1 小時
3. 應對網絡設備超時
場景 | 服務端配置 | 客戶端配置 |
---|---|---|
企業防火墻/NAT | ClientAliveInterval 30 | ServerAliveInterval 25 |
移動網絡 | ClientAliveCountMax 2880 | TCPKeepAlive yes |
4. 增強工具與技巧
-
終端復用工具
# 使用 tmux 防止斷連 tmux new -s mysession # 創建會話 tmux attach -t mysession # 恢復會話
-
自動重連腳本
#!/bin/bash while true; dossh -o ServerAliveInterval=30 user@hostsleep 10 done
四、完整配置示例
/etc/ssh/sshd_config
# 基礎安全
Port 2222
ListenAddress 192.168.1.100
PermitRootLogin no
PasswordAuthentication no
UseDNS no# 會話保活
ClientAliveInterval 60
ClientAliveCountMax 7200
TCPKeepAlive yes# 功能限制
AllowTcpForwarding no
X11Forwarding yes
MaxSessions 5# 資源控制
MaxStartups 10:30:100
五、調試與驗證
1. 連接狀態檢查
# 查看活躍會話
sudo netstat -tnpa | grep sshd# 實時監控日志
tail -f /var/log/auth.log | grep sshd
2. 保活測試
# 客戶端詳細輸出
ssh -vvv user@host
# 觀察日志中的保活包:
# debug3: Received SSH2_MSG_IGNORE
3. 網絡模擬測試
# 臨時阻斷 SSH 流量(測試后清除規則)
sudo iptables -A INPUT -p tcp --dport 2222 -j DROP
sudo iptables -D INPUT -p tcp --dport 2222 -j DROP
六、安全與資源權衡
-
風險控制
- 避免將
ClientAliveCountMax
設為無限大(0
) - 結合防火墻限制 SSH 訪問源 IP
- 避免將
-
資源管理
- 通過
MaxSessions
和MaxStartups
限制并發 - 監控
/var/log/secure
異常登錄嘗試
- 通過
-
協議更新
- 定期升級 OpenSSH 版本修復漏洞
- 禁用舊版協議:
Protocol 2
通過合理配置服務端參數、客戶端策略及系統級調優,可實現 SSH 會話的長時間穩定連接,同時兼顧安全性與資源效率。