在上篇文章中,我們探討了 ssh
命令的基本使用方法和一些有用的選項。不過每次都要手動輸入複雜的 IP 地址、用戶名和端口號碼,的確是相當麻煩。這時可以利用 SSH Config 文件 一次性解決這些麻煩。就像書籤一樣,可以儲存經常使用的伺服器連接資訊,並通過 別名(Alias) 輕鬆連接的神奇文件。
什麼是 SSH Config 文件?
SSH Config 文件 是用於用戶定義 SSH 客戶端運作方式的設置文件。如果將特定主機的連接資訊(用戶名、端口、所使用的密鑰文件等)預先存儲在此文件中,後續連接時只需使用簡短的別名就可以連接。
- 位置: 通常存在於用戶主目錄的
.ssh
文件夾內,名為config
。- 示例:
~/.ssh/config
- 示例:
-
文件創建: 如果
~/.ssh/config
文件不存在,可以手動創建。bash touch ~/.ssh/config chmod 600 ~/.ssh/config # 出於安全考慮,只授予所有者讀取/寫入權限
Config 文件編寫規則
Config 文件是簡單的文本文件,對於每個主機的設置都是以 Host
關鍵字開始,並以區塊形式編寫。
基本結構
Host [別名]
[選項1] [值1]
[選項2] [值2]
...
-
Host [別名]
: 標識該區塊的開始,您將使用的 別名(Alias) 在這裡定義。這個別名將在 SSH 命令中使用。也可以直接放入真實的主機地址(IP 或域名)。還可以使用通配符(*
,?
)。 -
縮排:
Host
下的選項必須 縮排。可以使用空格或製表符,但建議保持一致性。 -
選項:
Host
下列出各種在通過該別名連接時應用的 SSH 選項。這些選項與之前使用的ssh -選項
形式相同。
常用選項
選項 | 描述 | 示例值 |
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,使用 ssh-agent 時) |
yes |
StrictHostKeyChecking |
是否嚴格執行主機密碼檢查(建議 yes ) |
no (在初始測試期間暫時使用) |
PortForwarding |
是否允許端口轉發 | yes |
LocalForward |
本地端口轉發設置(與 -L 選項相同) |
8080 localhost:80 |
ServerAliveInterval |
檢查伺服器是否存活的間隔(秒) | 60 (防止斷開連接) |
ServerAliveCountMax |
在鏈接斷開之前重新嘗試的次數 | 3 |
SSH Config 文件編寫示例
讓我們將一些經常連接的伺服器設定添加到 ~/.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-
開頭的別名的設置。例如,當連接到aws-prod
或aws-dev
時,User
和IdentityFile
設置將被自動應用。當連接到aws-prod
時,HostName
將為prod
(稍後將在ssh aws-prod
命令中使用)。 -
10.0.0.*
: 連接到10.0.0.x
形式的 IP 地址時,將自動適用admin
用戶和預設 22 端口。
Config 文件的使用方法
現在如果已將設置儲存在 Config 文件中,實際連接將變得簡單得多。我們來看看以上的示例。
1. 使用別名連接
只需使用別名執行 SSH 連接命令。
- 使用
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 端口)
- 使用
aws-prod
(通配符別名):
ssh aws-prod
Enter passphrase for key '/home/youruser/.ssh/aws_ec2_key.pem':
ec2-user@aws-prod-hostname:~ $
注意: 像 aws-prod
這種未明確指定主機名的通配符 Host
,可能需要明確指定 HostName
選項,或在命令行中提供主機名。由於上面的 aws-*
示例未指定 HostName
,當實際執行 ssh aws-prod
時,SSH 客戶端將試圖將 prod
解讀為主機名。為了更清楚的使用,通常會將 Host prod-server
的別名與 HostName prod.example.com
進行映射。
使用 Config 文件的優點
- 便利性: 用短別名替換冗長且複雜的 SSH 命令,減少輸入錯誤並節省時間。
- 生產力: 可以快速在經常連接的伺服器之間切換,提高工作效率。
- 易於管理: 所有連接相關的設置都可以集中管理,維護也變得更簡單。例如,即使伺服器的 IP 地址發生變化,只需修改 Config 文件即可。
- 安全性: 無需將敏感信息(例如密鑰文件路徑)保留在命令歷史中。
總結
SSH Config 文件是每位使用 SSH 的開發者和系統管理員必備的工具。通過使用這個文件,您可以使您的 SSH 連接體驗變得更加便利和高效。打開 ~/.ssh/config
文件,創建您自己的別名吧!
還可以一起閱讀與 SSH 相關的其他文章!在右側搜索框中搜索 'ssh' 可以找到許多有關 ssh 的文章。
如果有任何疑問,隨時在評論中提出問題!
目前沒有評論。