続・$HOME/.ssh/configを活用していますか?

以前の記事「$HOME/.ssh/configを活用していますか?」では、設定ファイルを少し頑張って書けば普段のSSHライフが随分変わりますよ、と紹介しました。今日はその続編です。前回よりマニアックな設定を紹介します。

2段以上先のサーバにログインする

目的のサーバにログインするために、踏み台的なサーバを経由しないと入れない環境があります。例えば、dmzというサーバ経由でないとdb1 (=192.168.0.201)というホストにログインできない環境があるとします。このような場合に、ProxyCommandパラメータが利用できます。

Host db1
  HostName 192.168.0.201
  ProxyCommand ssh dmz nc %h %p

上の設定で「ssh db1」とすると、sshでdmzに接続し、dmzから192.168.0.201へログインします。これを利用するには踏み台サーバにncコマンドが必要ですが、大抵の環境にインストールされているのではないでしょうか。

Dynamic Forward機能を使う

最近のOpenSSHには、SOCKS Proxy機能が付いています。これは、自分専用のProxyサーバをログイン先に立てるような機能です。もうすこし正確に言うと、ローカルサーバの特定ポートがSOCKSプロトコルを受け付け、ポートフォワーディング機能によりリモートサーバから通信を行うものです。

Host dmz
  HostName dmz.example.com
  DynamicForward 1080

こうすることで、「ssh dmz」してからローカルサーバの1080番ポートとSOCKSプロトコルで話せば、dmzサーバを経由して通信を行うことができます。

SOCKSという名前を初めて聞く人もいるかもしれません。これは汎用のproxyプロトコルで、実は多くのソフトウェアが対応しています。例えばFirefoxなども対応していますので、直接アクセスできないURLにWebブラウザでアクセスしたい場合に利用できます。データセンター内のネットワーク機器のWebインターフェースや、アプリケーション開発中のWebサーバなど、これが無いと苦労する状況も多いのではないでしょうか。

共通設定をまとめて書く

複数のホストに同内容の設定をしたい場合、ホスト名としてワイルドカードが指定できます。例えば、次のように全サーバ共通の設定を記述できます。

Host *
  ForwardAgent yes
  ServerAliveInterval 200
  ForwardX11 no

ただし、$HOME/.ssh/configファイル内で最初に出現した設定が有効になることに注意が必要です。「man ssh_config」すると以下のように書いてあります。

Since the first obtained value for each parameter is used,
more host-specific declarations should be given near
the beginning of the file, and general defaults at the end.

ですから、全サーバ用の設定「Host *」は$HOME/.ssh/configの最後に書く必要があります。うっかりファイル先頭に書いてしまった場合、それ以降にホストごとの設定を書いても無効になってしまいます。

また、既に紹介したProxyCommandもワイルドカードを利用すればまとめて書くことができます。

Host db1
  HostName 192.168.0.201
Host db2
  HostName 192.168.0.202
Host db?
  ProxyCommand ssh dmz nc %h %p

もしくは次のような設定も考えられます。

Host dmz dmz-proxy
  HostName dmz.example.com
Host dmz2 dmz2-proxy
  HostName dmz2.example.com
Host *-proxy
  DynamicForward 1080

これだと、「ssh dmz」した場合は普通にログインし、「ssh dmz-proxy」したときだけSOCKS Proxyが有効になります。このようにワイルドカードを使うことで、共通の設定を一括でシンプルに記述できて便利です。

参考リンク

コメント / トラックバックはありません

コメントする