ssh port forwading memo

ssh port forwadingでゴニョゴニョしようとして、なんだかよくわからなくなったので、まとめてみた。

そもそも許可されていないとできない AllowTcpForwarding yes

sshd_config

AllowTcpForwarding yes

LとRの違い

参考:技術的雑談-sshのportForwadingってなあに? - Tsubasa's HomePage

  • -Lでは、sshを使った側のサーバに転送用のポートができる
  • -Rでは、sshdのある側のサーバに転送用のポートができる
L
host2# ssh -l hoge -L 8880:host1:80 host1
  • host2側でnetstat -aすると、127.0.0.1:8880がlistenになっている
  • host1側は特に変化無し
R
host2# ssh -l hoge -R 8880:host1:80 host1
  • host2側は特に変化無し。
  • host1側でnetstat -aすると、127.0.0.1:8880がlistenになっている。

127.0.0.1でしかlistenしないの? => GatewayPorts yes (ポート中継の許可) で0.0.0.0のlistenになる

参考:ssh port forwarding | mumumuの日記 | スラッシュドット・ジャパン

  • デフォルトだとGatewayPorts=noであるため、127.0.0.1でしかlistenしない
  • 127.0.0.1以外でlistenさせるには、設定をいじる必要あり
    • Lであればssh_config(Lはsshを使った側に転送用ポートができるため、クライアント側設定ファイル
    • Rであればsshd_config(Rはsshd側に転送用ポートができるため、サーバ側背ってファイル
  • Lであれば、実行時に以下のように指定する方法もあり
    • ssh -o GatewayPorts=yes -l hoge -L 8880:host1:80 host1

Nとかfと一緒に使うと嬉しいかも。

-N
リモートコマンドを実行しません。これはポート転送のみをおこないたい場合に便利です (プロトコル バージョン 2 のみ)。

SSH (1)

-f
ssh がコマンドを実行する直前に、バックグラウンドに移行するよう指示します。これはssh にパスワードあるいはパスフレーズを入力する必要はあるものの、そのコマンド自体はバックグラウンドで実行させたいときに便利です。これは-n オプションも含んでいます。リモートサイトで X11 プログラムを起動させる場合には、

ssh -fhostxterm

などとやるのがおすすめです。

SSH (1)

多段転送

参考:SSH/多段ポートフォワードでSSH接続 - yanor.net/wiki
例)host3:80 -> host2:81 -> host1:82
host1の82番にアクセスすることで、host3の80番にアクセスできる。

host3# ssh -t -R 81:localhost:80 host2 ssh -t -R 82:localhost:81 host1