上一篇文章中,我們探討了 `ssh` 指令的基本用法與實用選項。然而,每次手動輸入複雜的 IP、使用者名稱與埠號,實在是相當麻煩。此時,**SSH Config 檔案** 的使用能一次性解決這些痛點。它就像瀏覽器的書籤,將常用的伺服器連線資訊存放起來,並以 **別名(Alias)** 方式快速呼叫。 我自己在不知道 config 檔案存在的「完全新手」時期,曾經把常用的 ssh 指令直接寫進 `.bashrc` 並設定為 alias,實在是愚笨。後來學會 config 檔案後,才驚覺自己之前的做法有多麼低效。 ![SSH config 存在的驚嘆](/media/whitedec/blog_img/ssh_config_favorite_style.webp) --- ## SSH Config 檔案是什麼? {#sec-481141e7802b} **SSH Config 檔案** 是用來自訂 SSH 客戶端行為的設定檔。將特定主機的連線資訊(使用者名稱、埠號、使用的金鑰檔案等)預先存放,之後只需使用簡短的別名即可連線。 * **位置:** 通常位於使用者主目錄下的 `.ssh` 資料夾,檔名為 `config`。若是第一次安裝 ssh,可能尚未存在,需要自行建立。 * **檔案建立:** 若 `~/.ssh/config` 不存在,請自行建立,並確保權限設為 600。 ```bash touch ~/.ssh/config chmod 600 ~/.ssh/config # 安全起見,必須設定正確權限 ``` --- ## Config 檔案寫法規則 {#sec-a6ba2fff88f5} Config 檔案是一個簡單的文字檔,每個主機的設定以 `Host` 關鍵字開頭,並以區塊形式編寫。 #### 基本結構 ```bash Host [別名] [選項1] [值1] [選項2] [值2] ... ``` * **`Host [別名]`**:標示區塊開始,並定義將在 ssh 指令中使用的別名。別名也可以直接寫實際主機位址(IP 或域名),甚至使用萬用字元(`*`、`?`)。 * **縮排:** `Host` 下的選項必須縮排,空格或 tab 均可,但保持一致性最佳。 * **選項:** 在 `Host` 區塊內列出連線時使用的各種 SSH 選項,與 `ssh -選項` 的用法相同。 ### 常用選項 {#sec-488803d47bdf} | 選項 | 說明 | 範例值 | | --- | --- | --- | | `HostName` | 真實連線的伺服器 IP 或域名 | `192.168.1.100` 或 `example.com` | | `User` | 連線時使用的使用者帳號 | `ubuntu`、`ec2-user`、`root` | | `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 檔案範例 {#sec-92c9daf3ee29} 以下示範如何為常用伺服器新增設定。 ```ini # 第一台伺服器:網頁伺服器(別名: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-user` 與 `aws_ec2_key.pem`,並啟用存活訊號。 * `10.0.0.*`:對於 `10.0.0.x` 形式的 IP,預設使用 `admin` 使用者與 22 埠。 > 以上範例僅示範萬用字元的使用,實務上我較偏好 1:1 的設定,方便管理。若同一台伺服器需不同設定,可新增多個別名,像餐廳點餐一樣選擇。 --- ![SSH 連線按鈕點擊後的網路魔法](/media/whitedec/blog_img/ssh_config_network_magic.webp) ## 如何使用 Config 檔案 {#sec-e176d1ccdfce} 設定完成後,實際連線變得極為簡單。以下透過範例說明。 ### 1. 以別名連線 {#sec-b0810f8f4908} 只需輸入別名即可。 * **使用 `webserver` 別名:** ```bash 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` 別名:** ```bash ssh devbox Enter passphrase for key '/home/youruser/.ssh/id_rsa_dev': developer@devbox-domain:~ $ ``` > 連線成功後,本機 8000 埠會轉發至 `dev.example.com` 的 80 埠。 --- ## Config 檔案的優點 {#sec-2c234f7e8725} * **便利性:** 用簡短別名取代冗長指令,減少輸入錯誤與時間成本。 * **生產力:** 快速切換常用伺服器,提升工作效率。 * **易於管理:** 所有連線設定集中於一個檔案,維護更方便。若伺服器 IP 變更,只需更新 config 即可。 * **安全性:** 重要資訊(如金鑰路徑)不會留在指令歷史中。 --- ## 結語 {#sec-9c659c3d712e} SSH Config 檔案是每位使用 SSH 的開發者與系統管理員必備的工具。透過它,你可以將 SSH 連線體驗變得更順暢、更高效。快打開 `~/.ssh/config`,為自己打造專屬別名吧! 若想了解更多 SSH 相關內容,請在右側搜尋框輸入「ssh」即可找到相關文章。 如有任何疑問,歡迎在下方留言討論!