セキュリティの関係で、踏み台サーバーを経由しなければ、対象サーバーにSSHで接続できない環境があります。 このような場合に使えるSSH設定について。

[ローカル]  =>  [対象サーバー] // 直接のSSH接続はできない。

[ローカル]  =>  [踏み台サーバー]  =>  [対象サーバー]  // SSH接続可能

セキュリティのために、許可IP(例 会社内)からはアクセスできても、外部(例 自宅)からは直接SSH接続できない場合があります。 このような場合、外部からSSH接続できるように、踏み台となるサーバーを用意することがあります。 この場合、一旦踏み台サーバーにSSHでログインしてから、対象サーバーにログインすることになります。

メリット: ssh接続だけならこのままでも良いのですが、scpでファイルをローカルにコピーしたい場合は、2回のscpコマンド実行が必要で面倒です。 今回説明する多段SSHの設定を行うと、1回のscpコマンドで、踏み台サーバーを経由して対象サーバーからローカルにファイルがコピーできます。

.ssh/configの設定

~/.ssh/config に以下のように設定します。

Host           [踏み台の名称]
HostName       [踏み台のIP、またはホスト名]
User           [踏み台のユーザー名]
IdentityFile   [踏み台に接続する鍵]

Host           [対象の名称]
HostName       [対象のIP、またはホスト名]
User           [対象のユーザー名]
IdentityFile   [対象に接続するための鍵]
ProxyCommand   ssh -CW %h:%p [踏み台の名称]
最終行にある ProxyCOmmand の箇所で、踏み台サーバー経由で対象サーバーに接続するようになっています。

例 踏み台 stage.example.com 経由で、 192.168.100.10 に接続したい場合
ローカル  =>  踏み台[stage.example.com]  => 対象[192.168.100.10]
踏み台は鍵認証(~/.ssh/stage.pem)で、対象サーバーはパスワード認証の場合、以下のようになります。
Host           stage
HostName       stage.example.com
User           toyota
IdentityFile   ~/.ssh/stage.pem

Host           target
HostName       192.168.100.10
User           honda
ProxyCommand   ssh -CW %h:%p stage

対象サーバーに接続する場合、以下を実行します。

ssh target
この例では、対象サーバーはパスワード認証のため、上記コマンド実行後に、対象サーバーのパスワード入力が必要となります。 もし、踏み台サーバーもパスワード認証の場合は、踏み台のパスワード入力も必要となります。