ssh 設定
ssh 是遠端操控 unix 基礎的好工具。
因為 ssh 的強大,所以 ssh 的選項特別多和繁雜。
如果要簡化這些,有些聰明的方法。
就是透過 ssh config 把常用的設定放在設定檔中。
讓我們來看看我們有那些可以設定。
- 別名
- ip/hostname
- user
- key file
- port
- host key checking
- agent forward
- local forward
- remote forward
- x11 forward
- gateway port
- proxycommand
- proxyjump
別名 (host)
指定連線的別名,本來我們需要指定 user 和 ip 等資訊。
透過 host 可以指定為我們喜歡的別名。
而這個別名可以包含其他更多的選項及設定。
如果是常常使用的連線,可以節省很多宅宅的生命。
1 | host vps |
上面的是在 .ssh/config 裡的一個連線的設定。
原來我們用指令要輸入的可能是
1 | $ ssh -p 3322 -i ~/.ssh/id_rsa -L 5005:172.17.0.2:5005 \ |
有了前面 .ssh/config 中的設定,現在只要用 ssh vps
就可以代表上面長長一串的ssh 選項。
是不是讓我們浪費的生命舜間少了很多。
下面我們再對其他的設定多些說明。
ip/hostname
我們還是以上面的config中的vps來說明.
1 | hostname 1.2.3.4 |
這兒我們設定了 hostname 是 1.2.3.4 的 ip 。
也可以設定真正的 hostname ,例如 ns1.hinet.net 。
user
如果沒有指定 user ,ssh 一般是使用目前的用戶名來登入。
如果和遠端不同,就必須指定登入的用戶名。
我們在 .ssh/config 中指定就可以不必輸入不同的username。
1 | user ubuntu |
key file
我們的範例中指定的是預設的 identity file。
有時不同的遠端會使用不同的key file。例如 ~/.ssh/vps.pem 。
或是不同的位置。
1 | IdentityFile ~/.ssh/id_rsa |
port
遠端的機器可能為了安全的理由,將連線的 port 改為了不常用的 port。
1 | port 3322 |
在我們的例子裡使用的是 3322 ,可能為任意值。
host key checking
ssh 是一個很注重安全的工具。
對於 server 機器也有相應的檢查機制。
只是如果遠端的機器的 ip 如果是跳動不固定的。
有時就會有一定的煩惱,每次都要去確認。
好處是我們會注意到遠端的改變,需要我們去注意這樣的變動。
缺點就是這樣的訊息有時也很惱人。
1 | StrictHostKeyChecking no |
有了上面的設定,就會直接在known_hosts加入而不在檢查。
agent forward
有時遠端的機器只是一個跳板,我們的ssh-agent可以轉發我們本機的key
為了安全,我們不該把 key 放在跳板機,那是相當危險的。
因為一些跳板機是很多不同的人都可以連到的,代表你的key有機會瀉漏出去。
透過 agent forward 就可以不用把 key 放在跳板機,又可以使用到 ssh key agent 的方便。
尤其是為了安全我們會讓 key file 加上 passphase,就算遠端安全。
passphase在連線時重複輸入也很煩人。
這時有了 agent forward 就可以簡化又不失安全。
1 | ForwardAgent yes |
local/remote/x11 forward
這些選項都需要輸入非常長的 ssh 選項,不小心打錯了就會想讓人砸了鍵盤。
有了設定檔,可以確保不會出錯,又少輸入了很多keyboard,少死了很多打字需要的細胞。
1 | LocalForward 5005 172.17.0.2:5005 |
上面的設定讓本地的 5005 對應到遠端 172.17.0.2 的 5005 port。
remote forward部分是將遠端的 3128 port 對應到本地的 proxy.hinet.net 的 80 port。
ForwardX11 是讓本地的X11 server 對應到遠端的 x11,
讓遠端的 GUI 程式可以在本地的 x11 server 呈現。
gateway port
如果沒有指定(-g),只能本地的localhost可以對應 local forward,搭配 GatewayPorts yes
,
可以分享 local forward,讓區網的其他機器也可以連線到遠端的 port 。
1 | GatewayPorts yes |
ProxyCommand
有時為了安全,我們的遠端機器可能是位於內網的防火牆之內,
這時就需要透過 ProxyCommand 來連線。
1 | ProxyCommand ssh j nc %h %p |
上面的例子就是連線到遠端是透過 j 這台機器的 nc 建立 proxy 連線。
ProxyJump
這是一個比較新的選項。因為常常我們需要透過另一個 ssh 的連線來建立遠端的連線。
因些會有這個覺選項來讓透過 ssh 通道連線就有了這個選項。
1 | host vps |
上面的例子就是要建立 vps 的連線是透過 j 的 ssh 通道建立 vps的連線。
後記
ssh 的毛特別多,也說明他的功能特別強大。
值得多花些時間去了解,讓我們在遠端連線時更安全,更方便。