セキュリティ上の理由やネットワーク構成により、目的のサーバーに直接SSH接続できない場合があります。このような場合、一度**踏み台サーバー(Bastion Host / Jump Host)**に接続し、そこから目的のサーバーに接続する「多段SSH」が必要になります。
ここでは、ssh
コマンドの ProxyCommand
オプションや ProxyJump
オプション、またはSSH設定ファイル (~/.ssh/config
) を利用して多段SSH接続を行う方法を解説します。
1. ssh
コマンドの ProxyCommand
オプションを使用する
ProxyCommand
オプションは、SSH接続を確立する前に実行されるコマンドを指定します。このコマンドの標準入力/出力が、目的のサーバーへのSSH接続のトンネルとして利用されます。
ssh -o ProxyCommand="ssh -W %h:%p 踏み台サーバーのユーザー名@踏み台サーバーのIPアドレスまたはホスト名" 目的サーバーのユーザー名@目的サーバーのIPアドレスまたはホスト名
踏み台サーバーのユーザー名@踏み台サーバーのIPアドレスまたはホスト名
: 踏み台サーバーへの接続情報です。目的サーバーのユーザー名@目的サーバーのIPアドレスまたはホスト名
: 最終的に接続したい目的サーバーへの接続情報です。ssh -W %h:%p
:ssh
コマンドの-W
オプションは、標準入力/出力を介してTCPポート転送を行うためのものです。%h
は目的サーバーのホスト名、%p
は目的サーバーのポート番号に展開されます。
例:
- 踏み台サーバー:
bastion_user@192.168.1.100
- 目的サーバー:
target_user@10.0.0.5
ssh -o ProxyCommand="ssh -W %h:%p bastion_user@192.168.1.100" target_user@10.0.0.5
2. ssh
コマンドの ProxyJump
オプションを使用する (OpenSSH 7.3以降)
OpenSSH 7.3以降では、ProxyJump
オプションが導入され、多段SSH接続がよりシンプルに記述できるようになりました。
ssh -J 踏み台サーバーのユーザー名@踏み台サーバーのIPアドレスまたはホスト名 目的サーバーのユーザー名@目的サーバーのIPアドレスまたはホスト名
例:
ssh -J bastion_user@192.168.1.100 target_user@10.0.0.5
複数の踏み台サーバーを経由する場合も、カンマ区切りで指定できます。
ssh -J user1@host1,user2@host2 target_user@target_host
3. SSH設定ファイル (~/.ssh/config
) を利用する (推奨)
~/.ssh/config
ファイルに設定を記述することで、複雑なコマンドを毎回入力する手間を省き、エイリアスを使って簡単に接続できるようになります。
~/.ssh/config
ファイルを作成または編集します。
nano ~/.ssh/config
以下の内容を記述します。
# 踏み台サーバーの設定
Host bastion
HostName 192.168.1.100
User bastion_user
IdentityFile ~/.ssh/id_rsa_bastion # 踏み台サーバーへの接続に使う秘密鍵 (任意)
# 目的サーバーの設定
Host target
HostName 10.0.0.5
User target_user
ProxyJump bastion # ここで踏み台サーバーのHost名を指定
IdentityFile ~/.ssh/id_rsa_target # 目的サーバーへの接続に使う秘密鍵 (任意)
設定後、以下のコマンドで目的サーバーに接続できます。
ssh target
~/.ssh/config
の各オプション
Host
: この設定のエイリアス(短縮名)です。ssh
コマンドでこの名前を使用します。HostName
: 実際のホスト名またはIPアドレスです。User
: 接続するユーザー名です。IdentityFile
: 接続に使用する秘密鍵のパスです。ProxyJump
: 踏み台サーバーのHost
エイリアスを指定します。OpenSSH 7.3以降で利用可能です。ProxyCommand
:ProxyJump
が利用できない古いSSHクライアントの場合や、より複雑なトンネリングが必要な場合に使用します。# ProxyJumpの代わりにProxyCommandを使う場合 Host target_old_ssh HostName 10.0.0.5 User target_user ProxyCommand ssh bastion_user@192.168.1.100 -W %h:%p IdentityFile ~/.ssh/id_rsa_target
~/.ssh/config
を利用する方法は、設定を一度行えば再利用性が高く、管理も容易なため、多段SSH接続を行う際には最も推奨される方法です。