SSH

ssh ポートフォワーディングまとめ

More than 1 year has passed since last update.


概要

SSHのポートフォワーディングがあまりにわかりにくかったのでまとめました。

[mydev01] --> [mydev02] --> [mydev03]

サーバ名とglobalIP
便宜上のlocalhost名
役割

mydev01(192.168.33.31)
local1
ssh実行サーバ

mydev02(192.168.33.32)
local2
踏み台サーバ

mydev03(192.168.33.33)
local3
接続先サーバ

それぞれ localhost(127.0.0.1)だが便宜上区別するためにlocalに添字をつけました。


mydev01 -> mydev02 への接続


mydev01(global) -> mydev02(global), mydev02(global) -> mydev02(global)

[mydev01:term1]

### 以下コマンドを実行してターミナルはそのままにしておく
$ ssh -L 4001:mydev02:22 mydev02
※ -L : ローカルフォワーディング

[mydev01:term2]
### 別ターミナルでmydev02に接続
$ ssh -p 4001 localhost

[mydev02:term2]
$ netstat -ano | less
===================================
tcp 0 0 192.168.33.32:22 192.168.33.32:46727 ESTABLISHED keepalive (7186.15/0/0)
===================================

以下の流れで接続

1. [mydev01(global)]:4001 --> [mydev02(global)]:22

2. [mydev02(global)]:46727 --> [mydev02(global)]:22


mydev01(global) -> mydev02(global), mydev02(local2) -> mydev02(local2)

[mydev01:term1]

### 以下コマンドを実行してターミナルはそのままにしておく
$ ssh -L 4001:localhost:22 mydev02

[mydev01:term2]
### 別ターミナルでmydev02に接続
$ ssh -p 4001 localhost

[mydev02:term2]
$ netstat -ano | less
===================================
tcp 0 0 127.0.0.1:22 127.0.0.1:36691 ESTABLISHED keepalive (7186.74/0/0)
===================================

以下の流れで接続

1. [mydev01(global)]:4001 --> [mydev02(global)]:22

2. [mydev02(local2)]:36691 --> [mydev02(local2)]:22

この接続方法を使えば、localhostからの接続しか受け付けないmysqlでもリモートから接続する事ができる。


mydev01 -> mydev02 -> mydev03 の接続


mydev01(global) -> mydev02(global), mydev02(global) -> mydev03(global)

[mydev01:term1]

### 以下コマンドを実行してターミナルはそのままにしておく
$ ssh -L 4001:mydev03:22 mydev02

[mydev01:term2]
### 別ターミナルでmydev02に接続
$ ssh -p 4001 localhost

[mydev03:term2]
$ netstat -ano | less
===================================
tcp 0 0 192.168.33.33:22 192.168.33.32:34252 ESTABLISHED keepalive (7024.55/0/0)
===================================

以下の流れで接続

1. [mydev01(global)]:4001 --> [mydev02(global)]:22

2. [mydev02(global)]:34252 --> [mydev03(global)]:22


mydev01(global) -> mydev02(global), mydev02(local2) -> mydev02(local2), mydev02(global) -> mydev03(global), mydev03(local3) -> mydev03(local3)

[mydev01:term1]

### 以下コマンドを実行してターミナルはそのままにしておく
$ ssh -t -L 4001:localhost:4002 mydev02 ssh -L 4002:localhost:22 mydev03

[mydev01:term2]
### 別ターミナルでmydev03に接続
$ ssh -p 4001 localhost

[mydev03:term2]
$ netstat -ano | less
===================================
tcp 0 0 127.0.0.1:22 127.0.0.1:59607 ESTABLISHED keepalive (7175.63/0/0)
===================================

以下の流れで接続

1. [mydev01(global)]:4001 --> [mydev02(global)]:22

2. [mydev02(local2)]:XXXXX --> [mydev02(local2)]:4002

3. [mydev02(global)]:4002 --> [mydev03(global)]:22

4. [mydev03(local3)]:59607 --> [mydev03(local)3]:22

2.の「XXXXX」は調べ忘れ。mydev02の適当なポート番号が入っていたはず。


参考

踏み台経由でファイルを転送したい場合は

scp -l 16000 -o 'ProxyCommand ssh vagrant@(踏み台サーバ) nc %h %p' hoge.txt vagrant@(転送先サーバ):/tmp

でOK


  • TeraTerm



  • 踏み台を経由したvnc接続


    • 踏み台サーバにログイン

    • 設定->SSH転送->追加


      • ローカルポート : 12345

      • リッスン : (何もなし)

      • リモート側ホスト : リモートサーバのIP

      • ポート : 3389



    • 設定->設定の保存

    • いったんログアウトして再度踏み台サーバにログイン

    • Windowsでmstsc(リモートデスクトップ)を実行

    • コンピュータ : 127.0.0.1:12345

    • vncのログイン画面が表示される