👌

SSHのDynamic Forwardを気軽に使うTIPS

2020/09/18に公開

SSHのDynamic Forward機能って超絶便利ですよね。昨今は在宅勤務になったのもあり、以前より利用頻度が増えている気がします。

便利すぎて次のような$HOME/.ssh/configを使っている人も多いのではないでしょうか。

Host server01
  HostName server01.example.com
  DynamicForward 1080

Host server02
  HostName server02.example.com
  DynamicForward 1080

しかし、この設定だと先にログインした接続が1080番ポートを握ってしまうので、後から接続した方でDynamic Forwardを使いたい場合に使えない状態になります。

$ ssh server02
mux_client_forward: forwarding request failed: Port forwarding failed
muxclient: master forward request failed
bind [127.0.0.1]:1080: Address already in use
(以下略)

この事故の原因は、server01とserver02の両方の設定でDynamic Forwardを有効にしていることです。必要なときだけDynamic Forwardを有効にすればいいんですが、その際の設定と利用が簡単な方がいいですよね。

このような場合、ssh_configのホスト名のエイリアスとワイルドカードの機能が使えます。具体的には下記のように$HOME/.ssh/configを書くとシンプルにやりたいことが実現できます。

Host server01 server01.proxy
  HostName server01.example.com

Host server02 server02.proxy
  HostName server02.example.com

Host *.proxy
  DynamicForward 1080

このように書いた上で、普段のSSHアクセスはssh server01 とし、Dynamic Forwardを利用したいときだけ ssh server01.proxy などとすることでDynamic Forwardのオンオフをホスト名の使い分けで実現できます。

ssh_configのHostブロックのホスト名にはエイリアス名を列挙できること、ホスト名のワイルドカードを利用すれば複数ブロックにマッチすることを利用した設定例でした。このテクニックは汎用性が高いので他にも色々な応用ができると思います。

Discussion