SSH 連線偷吃步的小技巧,SSH Config
當我們需要連線到遠端的伺服器的時候,可以使用 SSH (Secure Shell) 連線這個工具進行遠端伺服器的登入,基本的 SSH 連線指令如下。
ssh [email protected]
user
為要連線的帳號名稱,host
為要連線的遠端伺服器位址,可以為 IP 或是 Domain name。
指令輸入完畢之後,根據遠端伺服器上的 SSH 設定,可以使用密碼或是金鑰的方式進行認證,認證成功才能登入遠端伺服器。
# 如果使用密碼登入,在輸入指令後還需要輸入密碼
ssh [email protected]
# [email protected]'s password:
在大多情況下,要管理的伺服器可能不只一個,如果數量一多,每次登入都要找對應伺服器的帳號、密碼與金鑰,會是一件很麻煩的事情,雖然可以用 alias 偷吃步。
alias ssh-to-server="ssh user@host"
但 SSH 其實本身就有內建一個更便利的方法 SSH Config。
首先先在 .ssh
資料夾底下建立一個 config
檔案。
touch ~/.ssh/config
之後就可以在 config
中進行設定,假設我們有一個 CRM 的後台伺服器。
Host crm
Hostname 49.159.176.123
User crm-admin
Port 22
identityfile /path/Key.pem
- Host:連線名稱。
- Hostname:遠端伺服器的位址。
- User:帳號。
- Port:遠端伺服器的 Port 號。
- identityfile:金鑰檔案位址。
設定完畢之後就可以直接輸入連線名稱就可以連線,少打很多字。
ssh crm
透過 Bation 連線的設定
有時候我們的伺服器不會開放對外連線,如果想要連線,必須經由另外一台特定的伺服器當作跳板才能連上,通常這種跳板被稱為 bastion,這個時候可以使用 Proxy Jump 的方式來進行連線。
Host crm
Hostname 49.159.176.123
User crm-admin
Port 22
identityfile /path/private_key
Host private-crm
Hostname 192.168.0.54
User private-crm-admin
ForwardAgent yes
ProxyJump crm
上述的設定檔中 private-crm 只能透過 crm 伺服器去連線。
ForwardAgent
這個參數允許讓本地的 SSH Key 在遠端 Server 上進行傳送,但記得要開啟 ssh-agent
,並將連線的 SSH Key 加入 ssh-agent
。
ssh-add /path/private_key
如果你使用 oh-my-zsh,可以在 .zshrc 的 plugin 中加入 ssh-agent,這樣 oh-my-zsh 會自動啟動 ssh-agent。
完成設定之後,就可以使用 ProxyJump
將 crm 設定為跳板,這時候連上 private-crm 就可以簡單一行指令。
ssh private-crm
讓多個 SSH 連線共用相同的設定
如果你有多個 SSH 連線使用相同的設定,你可以新增一個共用設定讓這些連線一起使用。以下面的設定檔案為例,可以看到所有的連線除了 Hostname
的 IP 不同之外,其餘部分都是使用相同的設定。
Host aws-1
Hostname 49.159.176.123
User ubuntu
Port 22
identityfile /path/Key.pem
Host aws-2
Hostname 49.159.176.124
User ubuntu
Port 22
identityfile /path/Key.pem
Host aws-3
Hostname 49.159.176.125
User ubuntu
Port 22
identityfile /path/Key.pem
這樣子的情況可以透過共用設定來精簡設定的內容。
首先新增一個共用設定,並將 Host
設定為 aws-*
,並將其他連線相同的設定都放在共用設定底下。共用設定與一般連線設定幾乎無異,唯一的差別是 Host
名稱包含了萬用字元 (wildcard) *
。
Host aws-*
User ubuntu
Port 22
identityfile /path/Key.pem
接下來刪除其他連線設定中相同的設定。Host
名稱有匹配到共用設定的話,就會直接使用共用設定。如此一來就可以少寫很多重複的內容,是不是很讚呢?😆
Host aws-1
Hostname 49.159.176.123
Host aws-2
Hostname 49.159.176.124
Host aws-3
Hostname 49.159.176.125