概要
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)
===================================
以下の流れで接続
- [mydev01(global)]:4001 --> [mydev02(global)]:22
- [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)
===================================
以下の流れで接続
- [mydev01(global)]:4001 --> [mydev02(global)]:22
- [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)
===================================
以下の流れで接続
- [mydev01(global)]:4001 --> [mydev02(global)]:22
- [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)
===================================
以下の流れで接続
- [mydev01(global)]:4001 --> [mydev02(global)]:22
- [mydev02(local2)]:XXXXX --> [mydev02(local2)]:4002
- [mydev02(global)]:4002 --> [mydev03(global)]:22
- [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のログイン画面が表示される