上一篇文章中,我們探討了 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」即可找到相關文章。

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