SSH トンネル (SSH Port Forwarding) によるリモートアクセス


SSH Port Forwarding を使うと、直接アクセスできないサーバーに、踏み台サーバーの SSH を経由してアクセスすることができる。

実行例

ポート転送

以下のコマンドを実行すると、ローカル PC 上のバインドポートへの通信が、踏み台サーバーを経由してリモートサーバーに転送される。バインドポートは他で使っていないものを指定すること。これを実行しておいたまま、バインドしたポートに対して通信すればよい。

BIND_PORT=(ローカル PC にバインドするポート番号)
BASTION_USERNAME=(踏み台サーバーの SSH ユーザー名)
BASTION_PORT=(踏み台サーバーのホスト名またはアドレス)
REMOTE_HOST=(アクセスしたいリモートサーバーのホスト名またはアドレス)
REMOTE_PORT=(アクセスしたいリモートサーバーのサービスポート番号)
ssh -N -L ${BIND_PORT}:${REMOTE_HOST}:${REMOTE_PORT} ${BASTION_USERNAME}@${BASTION_HOST}

例) SSH トンネルを経由してリモートサーバーに SSH でログインする。

REMOTE_USERNAME=(アクセスしたいリモートサーバーの SSH ユーザー名)
ssh -p ${BIND_PORT} ${REMOTE_USER}@localhost

例) SSH トンネルを経由してリモートサーバーの MySQL サーバーにアクセスする。

DB_USERNAME=(DB ユーザー名)
mysql -h localhost -P ${BIND_PORT} -u ${DB_USERNAME} -p -e "(SQL)"

ssh/scp で直接アクセス

ProxyCommand オプションを使用して、踏み台サーバーを経由して直接アクセスすることもできる。

ssh -o ProxyCommand="ssh ${BASTION_USERNAME}@${BASTION_HOST} -W %h:%p" \
   ${REMOTE_USERNAME}@${REMOTE_HOST}

scp も同様に、踏み台サーバーを経由して直接ファイルを転送することができる。

scp -o ProxyCommand="ssh ${BASTION_USERNAME}@${BASTION_HOST} -W %h:%p" \
   (転送するファイル) <remote_user>@<remote_host>:<remote_path>