📖 Linux SSH 遠端連線與安全

分類:伺服器管理 | 作者:pake | 發布時間:2024-09-10 08:19

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-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 的完整設定與安全強化指南,涵蓋基本連線、伺服器設定、金鑰驗證、安全防護、進階使用技巧與日誌分析。透過這些設定,您可以確保遠端伺服器的安全與高效管理。

⬅ 上一篇 下一篇 ➡
🔙 返回 伺服器管理 📚 返回教學列表 🏠 返回首頁