Linux SSH 遠端連線與安全
SSH(Secure Shell)是一種加密的遠端連線協議,用於安全地存取遠端伺服器。Linux 伺服器管理通常透過 SSH 進行遠端操作,因此正確的設定與安全強化是至關重要的。
本篇將介紹如何在 Fedora 或其他 Linux 系統上設定 SSH 伺服器、進行安全強化、SSH 登入管理與進階功能,如 SSH 金鑰驗證與防止暴力攻擊。
目錄
安裝與啟動 SSH 服務
安裝 OpenSSH 伺服器
Fedora、CentOS、RHEL 預設已包含 OpenSSH 伺服器,如需手動安裝:
sudo dnf install openssh-server -y
啟動並設定開機自動啟動
sudo systemctl enable --now sshd
檢查 SSH 服務狀態
sudo systemctl status sshd
SSH 客戶端基本使用
連線至遠端伺服器
ssh username@remote-server-ip
例如:
ssh root@192.168.1.100
指定非標準 SSH 連接埠(假設連接埠為 2222)
ssh -p 2222 username@remote-server-ip
傳輸檔案(使用 scp
)
上傳檔案:
scp localfile.txt user@remote-server-ip:/home/user/
下載檔案:
scp user@remote-server-ip:/home/user/file.txt .
使用 rsync
進行高效能同步:
rsync -avz localfolder/ user@remote-server-ip:/home/user/backup/
設定 SSH 伺服器
編輯 SSH 設定檔
sudo nano /etc/ssh/sshd_config
常見的設定選項:
Port 2222 # 修改 SSH 連接埠(預設 22)
PermitRootLogin no # 禁止 root 直接登入
PasswordAuthentication no # 禁用密碼驗證(需 SSH 金鑰)
AllowUsers user1 user2 # 限制允許登入的使用者
修改完成後,重新啟動 SSH 服務:
sudo systemctl restart sshd
使用 SSH 金鑰驗證
產生 SSH 金鑰
ssh-keygen -t rsa -b 4096
會生成:
- 私鑰:
~/.ssh/id_rsa
(請勿洩露) - 公鑰:
~/.ssh/id_rsa.pub
(可分享給伺服器)
將公鑰傳送至遠端伺服器
ssh-copy-id user@remote-server-ip
手動複製方式:
cat ~/.ssh/id_rsa.pub | ssh user@remote-server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
測試 SSH 免密碼登入
ssh user@remote-server-ip
防止暴力攻擊與安全強化
安裝 Fail2Ban(防止 SSH 暴力破解)
sudo dnf install fail2ban -y
啟動並開機自動啟動:
sudo systemctl enable --now fail2ban
設定 Fail2Ban 過濾規則
建立 /etc/fail2ban/jail.local
,加入以下內容:
[sshd]
enabled = true
port = 2222
maxretry = 5
findtime = 600
bantime = 3600
重啟 Fail2Ban 服務:
sudo systemctl restart fail2ban
限制 SSH 允許的 IP
在 /etc/hosts.allow
中允許特定 IP:
sshd: 192.168.1.100 203.0.113.50
在 /etc/hosts.deny
中封鎖所有其他 IP:
sshd: ALL
設定防火牆規則
開放自訂連接埠(假設為 2222):
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
進階 SSH 設定
設定 SSH 連線保持存活
在 /etc/ssh/sshd_config
中加入:
ClientAliveInterval 60
ClientAliveCountMax 3
SSH 代理轉發(Forwarding)
允許 SSH 代理轉發(例如用於 GitHub):
ssh -A user@remote-server-ip
SSH 隧道與反向代理
遠端連線本地服務(轉發 8080 埠):
ssh -L 8080:localhost:80 user@remote-server-ip
反向 SSH 連線(遠端機器可存取本地端 9090 服務):
ssh -R 9090:localhost:22 user@remote-server-ip
SSH 日誌與錯誤排除
檢查 SSH 連線記錄
sudo journalctl -u sshd --no-pager | tail -n 50
或檢查 /var/log/secure
:
sudo tail -f /var/log/secure
檢查 SSH 服務狀態
sudo systemctl status sshd
測試 SSH 設定
sshd -t
找出 SSH 失敗登入嘗試
sudo grep "Failed password" /var/log/secure
找出多次失敗的 IP:
sudo awk '{print $11}' /var/log/secure | sort | uniq -c | sort -nr | head -10
結語
本篇提供了 SSH 的完整設定與安全強化指南,涵蓋基本連線、伺服器設定、金鑰驗證、安全防護、進階使用技巧與日誌分析。透過這些設定,您可以確保遠端伺服器的安全與高效管理。