檢查 SSH 服務

安裝與服務狀態確認

檢查 SSH 服務是否啟動

# 檢查 ssh(用戶端)版本(可選)
ssh -V

# 檢查 sshd(伺服端)服務狀態
sudo systemctl status ssh
sudo systemctl status sshd

安裝 OpenSSH 伺服器(若尚未安裝)

sudo apt update
sudo apt install openssh-server

確認 SSH 監聽的埠號(預設為 22)

# 使用 netstat(需安裝 net-tools 套件)
sudo apt install net-tools
sudo netstat -tuln | grep 22

# 使用 ss(現代 Linux 推薦方式)
sudo ss -tuln | grep 22

檢查防火牆設置

使用 UFW(Uncomplicated Firewall)

# 查看狀態
sudo ufw status

# 開放 SSH 連接埠(預設為 22)
sudo ufw allow ssh

# 若防火牆尚未啟用
sudo ufw enable

使用 iptables(若未使用 UFW)

# 查看規則
sudo iptables -L -n | grep 22

# 新增規則以允許 port 22
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

編輯 SSH 配置檔案

sudo nano /etc/ssh/sshd_config

確認以下設定是否存在且正確(視需求調整):

Port 22
PermitRootLogin yes           # 是否允許 root 登入,依實際需求設定(建議為 no)
PasswordAuthentication yes    # 是否允許使用密碼登入,若使用金鑰登入可設為 no

編輯完畢後重新啟動 SSH 服務:

sudo systemctl restart sshd

使用公私鑰驗證登入

建立金鑰(於客戶端機器)

ssh-keygen -t rsa -b 4096 -C "[email protected]"
# 產生後會在 ~/.ssh/id_rsa(私鑰)與 ~/.ssh/id_rsa.pub(公鑰)

將公鑰加入遠端主機

# 建立 ~/.ssh 資料夾(若尚未存在)
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# 將公鑰內容加入 authorized_keys
echo "你的公鑰內容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

也可使用 ssh-copy-id 工具自動上傳公鑰(於客戶端執行):

ssh-copy-id user@remote-server

備註

  • 為提高安全性,建議:

    • 禁用密碼登入(PasswordAuthentication no
    • 禁用 root 登入(PermitRootLogin no
    • 變更預設埠號(非 22)
  • 若改用非預設埠號,記得更新防火牆規則,並於連線時指定埠號:

ssh -p 22022 user@remote-server