sshでトンネルを作成(Rオプションの使い方)

日付 2016.02.03
タイトル sshでトンネルを作成(Rオプションの使い方)
本文
以下のように、インターネット越しでグローバルアドレスを持っているBを踏み台にして、CからAへの接続が張れるようにする方法です。
AとCはグローバルアドレスを持ちません。
[A lip:192.168.3.33] - |inet| - [B gip:1.2.3.4 lip:192.168.1.11] - [C lip:192.168.1.12]

# AからBへRオプション付きでログインする、Bのport12233をAのport22につなげる
ssh -l [B's user name] -R 12233:127.0.0.1:22 1.2.3.4

# BからCへRオプション付きでログインする、Cのport12222をBの12233につなげる
ssh -l [C's user name] -R 12222:127.0.0.1:12233 192.168.1.12

# メモ:
# C -> 12222:B -> B:12233 -> A:22
# のように接続していったのと逆に転送される。


これでC->Aトンネルがつながりました。
以下使い方例です。

# 例1) CからAへ接続
ssh -l [A's user name] -p 12222 127.0.0.1

# 例2) CからAへファイル転送
scp -P 12222 [ファイル名] [A's user name]@127.0.0.1:/path/to/A's/save/dir/

# 例3) CからAへrsync
rsync -aAHX -e 'ssh -p 12222' [転送元パス] [A's user name]@127.0.0.1:/path/to/A's/save/dir/

グローバルアドレスを持たないサーバ間の同期や、セキュリティの問題でパブリックなホストに一時的にでも置くことを禁止されている個人情報入りのファイルを手元のファイルサーバへ転送するときなどに便利です。