多段SSH接続

SSHサーバを複数経由させることでセキュリティレベルを高めることがあります。秘密鍵はクライアントマシンに限定して、間のマシンには公開鍵しかおかず、秘密鍵を持たないマシンからのアクセスはできないようにするのと、間のマシンではIP制限を追加するなどして、防御壁を重ねるわけです。

最初にSSHログインが必要なマシンをSSHゲートウェイと呼ぶことにしましょう。基本は、SSHゲートウェイ経由で作業対象のSSHサーバーに接続するには、SSHゲートウェイへSSHログインしてから、さらに作業対象のSSHサーバーへSSHログインします。

localhost$ ssh ssh_gateway
ssh_gateway$ ssh target_host
target_host$

この接続方法は面倒ですね。しかもSSHゲートウェイに秘密鍵を置く必要がでてきます。ssh_configを使うと、もっと手軽に作業対象のSSHサーバーへログインできるようになります。Linuxだと基本設定は/etc/ssh/ssh_configにあります。アカウント専用の設定は$HOME/.ssh/configに記述します。

Host ssh_gateway

Host target_host
  ProxyCommand ssh -W %h:%p ssh_gateway

これで、target_hostへ直接SSHログインできるようになります。

localhost$ ssh target_host
target_host$

さらに多段にすることもできて、ssh_gateway→target_host→target_host2というように複数のSSHサーバーを経由する設定もできます。

Host ssh_gateway

Host target_host
  ProxyCommand ssh -W %h:%p ssh_gateway

Host target_host2
  ProxyCommand ssh -W %h:%p ssh_target_host

ちなみに、ssh-agentを使うとパスフレーズの入力も省略ができるようになります。CentOSやUbuntuでは自動起動していますが、していない場合は次のようにコンソールで実行してください。

$ eval `/usr/bin/ssh-agent`

秘密鍵を登録します。秘密鍵のファイル名は使っているものを指定してください。このときパスフレーズを入力するとssh-agentが覚えてくれて、次回以降はssh-agentが代わりにパスフレーズの提供をしてくれます。

$ ssh-add ~/.ssh/id_rsa

後は普通にSSHログインをするだけです。

$ ssh target_host

OpenSSHについては下記が参考になります。

同じタグの記事: Linux
同じタグの記事: OpenSSH
同じタグの記事: SSH
同じカテゴリの記事: Linux
関連書籍: OpenSSH