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