上一篇文章中,我們探討了 ssh 指令的基本用法與實用選項。然而,每次手動輸入複雜的 IP、使用者名稱與埠號,實在是相當麻煩。此時,SSH Config 檔案 的使用能一次性解決這些痛點。它就像瀏覽器的書籤,將常用的伺服器連線資訊存放起來,並以 別名(Alias) 方式快速呼叫。

我自己在不知道 config 檔案存在的「完全新手」時期,曾經把常用的 ssh 指令直接寫進 .bashrc 並設定為 alias,實在是愚笨。後來學會 config 檔案後,才驚覺自己之前的做法有多麼低效。

SSH config 存在的驚嘆


SSH Config 檔案是什麼?



SSH Config 檔案 是用來自訂 SSH 客戶端行為的設定檔。將特定主機的連線資訊(使用者名稱、埠號、使用的金鑰檔案等)預先存放,之後只需使用簡短的別名即可連線。

  • 位置: 通常位於使用者主目錄下的 .ssh 資料夾,檔名為 config。若是第一次安裝 ssh,可能尚未存在,需要自行建立。
  • 檔案建立:~/.ssh/config 不存在,請自行建立,並確保權限設為 600。
    touch ~/.ssh/config
    chmod 600 ~/.ssh/config  # 安全起見,必須設定正確權限

Config 檔案寫法規則

Config 檔案是一個簡單的文字檔,每個主機的設定以 Host 關鍵字開頭,並以區塊形式編寫。

基本結構

    Host [別名]
        [選項1] [值1]
        [選項2] [值2]
        ...
  • Host [別名]:標示區塊開始,並定義將在 ssh 指令中使用的別名。別名也可以直接寫實際主機位址(IP 或域名),甚至使用萬用字元(*?)。
  • 縮排: Host 下的選項必須縮排,空格或 tab 均可,但保持一致性最佳。
  • 選項:Host 區塊內列出連線時使用的各種 SSH 選項,與 ssh -選項 的用法相同。

常用選項

選項 說明 範例值
HostName 真實連線的伺服器 IP 或域名 192.168.1.100example.com
User 連線時使用的使用者帳號 ubuntuec2-userroot
Port 伺服器 SSH 埠號(預設 22) 2222
IdentityFile 連線時使用的私鑰檔案路徑 ~/.ssh/id_ed25519_myserver
ForwardAgent 啟用 SSH Agent Forwarding yes
StrictHostKeyChecking 是否嚴格檢查主機金鑰(建議 yes no(測試時臨時使用)
PortForwarding 是否允許埠轉發 yes
LocalForward 本機埠轉發(等同 -L 8080 localhost:80
ServerAliveInterval 伺服器存活檢查間隔(秒) 60
ServerAliveCountMax 失敗時重試次數 3

SSH Config 檔案範例



以下示範如何為常用伺服器新增設定。

# 第一台伺服器:網頁伺服器(別名:webserver)
Host webserver
    HostName 192.168.1.100
    User ubuntu
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_webserver  # 使用專屬金鑰

# 第二台伺服器:開發伺服器(別名:devbox)
Host devbox
    HostName dev.example.com
    User developer
    IdentityFile ~/.ssh/id_rsa_dev  # RSA 金鑰
    # 連線時將本機 8000 埠轉發至遠端 80 埠
    LocalForward 8000 localhost:80 

# 第三台伺服器:所有 AWS EC2 伺服器(別名:aws-*)
Host aws-*
    User ec2-user
    IdentityFile ~/.ssh/aws_ec2_key.pem
    # 為保持連線不中斷,定期發送訊號
    ServerAliveInterval 60
    ServerAliveCountMax 3

# 特定 IP 範圍的通用設定(別名:10.0.0.*)
Host 10.0.0.*
    User admin
    Port 22

說明:

  • webserver:以 ubuntu 使用者、2222 埠、id_ed25519_webserver 金鑰連線至 192.168.1.100
  • devbox:以 developer 使用者、id_rsa_dev 金鑰連線至 dev.example.com,並將本機 8000 埠轉發至遠端 80 埠。
  • aws-*:所有以 aws- 開頭的別名皆使用 ec2-useraws_ec2_key.pem,並啟用存活訊號。
  • 10.0.0.*:對於 10.0.0.x 形式的 IP,預設使用 admin 使用者與 22 埠。

以上範例僅示範萬用字元的使用,實務上我較偏好 1:1 的設定,方便管理。若同一台伺服器需不同設定,可新增多個別名,像餐廳點餐一樣選擇。


SSH 連線按鈕點擊後的網路魔法

如何使用 Config 檔案

設定完成後,實際連線變得極為簡單。以下透過範例說明。

1. 以別名連線

只需輸入別名即可。

  • 使用 webserver 別名:
    ssh webserver
    Enter passphrase for key '/home/youruser/.ssh/id_ed25519_webserver':
    ubuntu@webserver-ip:~ $

這條指令實際上等同於 ssh -p 2222 -i ~/.ssh/id_ed25519_webserver ubuntu@192.168.1.100

  • 使用 devbox 別名:
    ssh devbox
    Enter passphrase for key '/home/youruser/.ssh/id_rsa_dev':
    developer@devbox-domain:~ $

連線成功後,本機 8000 埠會轉發至 dev.example.com 的 80 埠。


Config 檔案的優點

  • 便利性: 用簡短別名取代冗長指令,減少輸入錯誤與時間成本。
  • 生產力: 快速切換常用伺服器,提升工作效率。
  • 易於管理: 所有連線設定集中於一個檔案,維護更方便。若伺服器 IP 變更,只需更新 config 即可。
  • 安全性: 重要資訊(如金鑰路徑)不會留在指令歷史中。

結語

SSH Config 檔案是每位使用 SSH 的開發者與系統管理員必備的工具。透過它,你可以將 SSH 連線體驗變得更順暢、更高效。快打開 ~/.ssh/config,為自己打造專屬別名吧!

若想了解更多 SSH 相關內容,請在右側搜尋框輸入「ssh」即可找到相關文章。

如有任何疑問,歡迎在下方留言討論!