覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Windows 10 - コマンドでポートフォワード(SSHトンネル)

ここ最近の Windows 10 であれば sshポートフォワード(SSHトンネリング)するのには、 SSHクライアントソフトを別途インストールしなくても組み込みのコマンドで実行できます。

実行するコマンド (公開鍵認証でのSSHの場合)

ssh {ssh接続用ユーザ}@{踏み台サーバのホスト} -i {秘密鍵のパス} -L {待ち受けするポート}:{転送先のホスト}:{転送先ホストのポート}


具体的な実行例は以下になります。(IPアドレスやホスト名等はある程度伏せた感じにしています)

ssh user001@40.125.XXX.XX -i C:\Users\user1\privatekey.pem -L 11433:dummy-DB-***01.database.windows.net:1433

上記例でいくと以下のようになっています。

  • 踏み台とするSSHサーバ: 40.125.XXX.XX
  • ローカルで待ち受けするポート: 11433
  • SSHサーバ経由で実際に接続したいサーバ
    • ホスト: dummy-DB-***01.database.windows.net
    • ポート: 1433

この例は、Azure上のSQL Server へ SSHトンネリングして接続したい場合の設定イメージになります。


本筋とずれますが、 {秘密鍵のパス} が、ユーザディレクトリの下などではない場合、Permission denied になることがあります。
公開範囲の狭いディレクトリ(ユーザディレクトリの下)に秘密鍵は配置してください。


正常に接続できれば、ローカルでの netstat -na の結果に、待ち受けしたポートでの LISTENING の結果が含まれます。(以下)

PS C:\Users> netstat -na

アクティブな接続

  プロトコル  ローカル アドレス      外部アドレス           状態
...
  TCP         127.0.0.1:11433        0.0.0.0:0              LISTENING
...


この状態で、 locahost:11433 (or 127.0.0.1:11433) へ通信すると、
SSHトンネリングされて dummy-DB-***01.database.windows.net:1433 へ転送されます。


まとめ

Windowsでもコマンド一発でsshポートフォワードできて楽ですね。



関連エントリ