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

參考資料

sharkHead
written by
sharkHead

後端打工仔,在下班後喜歡研究各種不同的技術。稍微擅長 PHP,並偶爾涉獵前端開發。個性就像動態語言般隨興,但渴望做事能像囉嗦的靜態語言那樣嚴謹。

0 則留言
新增留言
編輯留言