目的
NAT 配下の Linux ホスト -> host1
host1
からアクセスできるサーバー -> SV
がある
host1
から SV
へ ssh して経路を作って、 SV
から host1
に ssh して、 SV
から host1
をいじりたい
リバース SSH トンネル
という名前の技術である
ssh -R <remote_listen_port>:localhost:<local_listen_port> <user>@<host>
という書式で、 host1
から SV
に ssh する
ssh -R 10022:localhost:22 takashi@REMOTE_HOST_NAME_OR_IP
SV
では、 10022
が listen されているので
ssh -p 10022 <host1_username>@localhost
で、 SV
から host1
へ ssh 出来る
host1 の起動時に、トンネルを作る
#!/bin/bash # SV のユーザー名とアドレス USER="username" HOST="SV_address" # SV で開けるリモートポート (任意) REMOTE_PORT=remote_port # ローカルSSHポート LOCAL_PORT=22 # 無限ループでトンネルを維持 while true; do # リバースSSHトンネルを確立 ssh -R $REMOTE_PORT:localhost:$LOCAL_PORT -N \ -o ServerAliveInterval=60 \ -o ServerAliveCountMax=3 \ $USER@$HOST # トンネルが切断された場合、10秒待機してから再接続 sleep 10 done
実行権限をつけて
chmod +x /path/to/script.sh
これを、 cron に入れる
@reboot /path/to/script.sh