在 Windows 上使用 SSH 私鑰連接到 Linux 主機:全面指南

  • Post by
  • Nov 22, 2023
post-thumb

SSH(Secure Shell)是一種安全的網路協議,廣泛用於遠程登入和管理 Linux 伺服器。隨著 Windows 10 和 Windows 11 內建 OpenSSH 功能的完善,在 Windows 系統上產生 SSH 私鑰並用於 Linux 伺服器的安全連接變得更加便捷和安全。本文將提供一個全面的指南,涵蓋最新的安全實踐和密鑰類型建議。

1. 了解 SSH 密鑰類型與安全性

在開始生成 SSH 密鑰前,了解不同密鑰類型的安全性和適用場景非常重要。目前主流的 SSH 密鑰類型包括 RSA、ECDSA 和 Ed25519。

Ed25519 是目前被廣泛認為最安全且高效的 SSH 密鑰類型。相較於傳統的 RSA 密鑰,Ed25519 具有以下優勢:

  • 更高的安全性:使用 256 位元密鑰長度和更優秀的密碼學特性
  • 更快的加解密速度:在相同安全級別下,處理速度比 RSA 快
  • 更短的密鑰長度:相比 RSA 的 4096 位元,Ed25519 密鑰更為簡短
  • 對側信道攻擊的抵抗力更強:設計上能夠抵抗多種常見的側信道攻擊

雖然 RSA 密鑰(特別是 4096 位元長度)在可預見的未來仍被視為安全,但如果連接的伺服器支援 Ed25519,強烈建議使用這種更現代的密鑰類型。

2. 在 Windows 上生成 SSH 密鑰對

Windows 10(1809 版本以後)和 Windows 11 已內建 OpenSSH 客戶端,無需額外安裝即可使用。如果您的系統尚未啟用此功能,可以通過「設定」>「應用程式」>「選用功能」>「新增功能」中找到並安裝「OpenSSH 客戶端」。

使用 Ed25519 密鑰(推薦)

打開 PowerShell 或命令提示字元,執行以下命令以生成 Ed25519 密鑰對:

ssh-keygen -t ed25519 -C "your_email@example.com"

使用 RSA 密鑰(兼容性更好)

如果需要更廣泛的兼容性(例如連接較舊的 Linux 系統),可以使用 RSA 密鑰,但建議使用至少 4096 位元的密鑰長度:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

執行命令後,系統會提示您指定密鑰保存位置。預設位置通常是 C:\Users\YourUsername\.ssh\id_ed25519(或 id_rsa)。建議使用預設位置,除非您有特定需求。

接著,系統會詢問是否設置密碼短語(passphrase)。強烈建議設置一個強密碼短語,這為您的私鑰提供了額外的保護層。即使私鑰文件被竊取,沒有密碼短語也無法使用。

完成後,系統會在指定位置生成兩個文件:

  • 私鑰文件(無副檔名):id_ed25519id_rsa
  • 公鑰文件(.pub 副檔名):id_ed25519.pubid_rsa.pub

3. 將公鑰傳輸到 Linux 伺服器

將公鑰添加到 Linux 伺服器有多種方法,以下介紹兩種常用方式:

方法一:使用 ssh-copy-id(需要密碼登入權限)

如果您已經可以通過密碼登入 Linux 伺服器,可以使用 ssh-copy-id 命令自動將公鑰添加到伺服器。在 Windows 10/11 中,可以通過 PowerShell 使用以下命令:

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh username@linux_server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

方法二:手動添加公鑰

如果無法使用 ssh-copy-id,可以手動將公鑰內容添加到 Linux 伺服器:

  1. 在 Windows 上查看公鑰內容:

    type $env:USERPROFILE\.ssh\id_ed25519.pub
    
  2. 複製顯示的公鑰內容

  3. 登入 Linux 伺服器,確保 .ssh 目錄存在並具有正確的權限:

    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    
  4. 編輯或創建 authorized_keys 文件:

    nano ~/.ssh/authorized_keys
    
  5. 將複製的公鑰內容粘貼到文件中,每個公鑰佔一行

  6. 保存文件並設置正確的權限:

    chmod 600 ~/.ssh/authorized_keys
    

4. 在 Windows 上配置 SSH 客戶端

為了更方便地使用 SSH 密鑰,可以配置 SSH 客戶端以自動使用密鑰並管理密碼短語:

啟動 SSH 代理

在 Windows 10/11 中,可以通過以下步驟啟動 SSH 代理並添加私鑰:

  1. 以管理員身份打開 PowerShell,執行以下命令設置 SSH 代理服務為自動啟動:

    Set-Service -Name ssh-agent -StartupType Automatic
    Start-Service ssh-agent
    
  2. 添加私鑰到 SSH 代理:

    ssh-add $env:USERPROFILE\.ssh\id_ed25519
    

這樣,SSH 代理會記住您的密碼短語,無需每次連接時都輸入。

創建 SSH 配置文件

為了更方便地管理多個 SSH 連接,可以創建 SSH 配置文件:

  1. .ssh 目錄中創建或編輯 config 文件:

    notepad $env:USERPROFILE\.ssh\config
    
  2. 添加伺服器配置,例如:

    Host myserver
        HostName 192.168.1.100
        User username
        IdentityFile ~/.ssh/id_ed25519
        Port 22
    
  3. 保存文件後,可以直接使用別名連接:

    ssh myserver
    

5. 連接到 Linux 伺服器

完成上述配置後,可以使用以下命令連接到 Linux 伺服器:

使用密鑰文件直接連接

ssh -i %USERPROFILE%\.ssh\id_ed25519 username@linux_server_ip

使用 SSH 代理連接(推薦)

如果已將私鑰添加到 SSH 代理,可以直接連接:

ssh username@linux_server_ip

使用配置文件中的別名連接

如果已創建 SSH 配置文件,可以使用別名直接連接:

ssh myserver

6. 增強 Linux 伺服器 SSH 安全性

為了進一步提高 SSH 連接的安全性,可以在 Linux 伺服器上進行以下配置:

禁用密碼驗證

編輯 SSH 伺服器配置文件:

sudo nano /etc/ssh/sshd_config

找到並修改以下設置(如果被註釋,請取消註釋):

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

限制 Root 用戶登入

在同一配置文件中,設置:

PermitRootLogin prohibit-password

這將允許 root 用戶使用密鑰登入,但禁止密碼登入。如果完全禁止 root 登入,可以設置為 no

更改 SSH 端口

為了減少自動掃描攻擊,可以考慮更改默認的 SSH 端口(22):

Port 2222  # 選擇一個非標準端口

限制允許的用戶

限制只有特定用戶可以通過 SSH 登入:

AllowUsers username1 username2

啟用雙因素認證

對於需要更高安全性的環境,可以考慮啟用雙因素認證,例如 Google Authenticator。

重啟 SSH 服務

完成配置後,重啟 SSH 服務以應用更改:

sudo systemctl restart sshd

7. 故障排除與常見問題

權限問題

如果遇到「Permission denied」錯誤,請檢查 Linux 伺服器上的文件權限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

密鑰格式問題

某些舊版本的 SSH 可能不支持 Ed25519 密鑰。如果遇到兼容性問題,可以嘗試使用 RSA 密鑰。

連接被拒絕

如果連接被拒絕,可能是因為:

  • 公鑰未正確添加到 authorized_keys
  • SSH 服務配置不允許密鑰認證
  • 防火牆阻止了連接

可以使用 -v 參數獲取詳細的連接信息:

ssh -v username@linux_server_ip

結論

通過使用 SSH 密鑰,特別是更安全的 Ed25519 密鑰,可以顯著提高 Windows 到 Linux 連接的安全性和便利性。Windows 10/11 內建的 OpenSSH 客戶端使這一過程變得更加簡單。結合本文提供的安全配置建議,可以建立一個既安全又高效的遠程管理環境。

參考資料

  1. Microsoft Learn. (2025). 教學課程: Windows 終端機中的 SSH. https://learn.microsoft.com/zh-tw/windows/terminal/tutorials/ssh
  2. Microsoft Learn. (2025). 適用於 Windows 的 OpenSSH 伺服器組態. https://learn.microsoft.com/zh-tw/windows-server/administration/openssh/openssh-server-configuration
  3. Arch Linux Wiki. (2025). SSH 密鑰. https://wiki.archlinuxcn.org/zh-hant/SSH_%E5%AF%86%E9%92%A5
  4. 飛飛. (2024). Kali Linux SSH 設定與安全性強化指南. https://feifei.tw/kali-linux-ssh-setup-security-guide/
  5. CSDN. (2023). Ed25519 與 RSA 加密算法比較. https://blog.csdn.net/hadues/article/details/130675430
  6. 騰訊雲開發者社區. (2023). SSH 密鑰類型. https://cloud.tencent.com/developer/article/2347993
LATEST POST
TAG