リモートの閉じられた環境のサーバにアクセスする。
web applicationなどを作成しているとき、公開前の段階であるにもかかわらずwebブラウザなどでアクセスして
実際の動作をチェックしたいということがある。こんな時にトンネルを掘って作業する。
ちょっと調べたりして時間がかかったりしてしまったのでメモ。
sshでlogin
sshでloginしよう。同じ鍵を持ち回る時ssh-agentを使っても良い。
また、以下のような設定ファイルをかきトンネルを掘っても良い。
対象とするネットワーク
[local] --> [humidai] ---> [target.app]
humidaiは外部へ公開されていて、local(自分)からsshでアクセスすることは可能。
ここで、sshでトンネルを掘って直接target.appにつなげられるようにしてみる。*1
HOST target.app.net user podhmo HostName ap2 ProxyCommand ssh podhmo@humidai.net -W %h:%p IdentityFile ~/.ssh/id_rsa_your_key HOST humidai.net User podhmo IdentityFile ~/.ssh/id_rsa_your_key
ProxyCommandは、sshでログインしようとした際に間で実行されるコマンド。%h,%pにはホスト名とポート番号が入る。
Dynamic forwarding
sshにはdynamic forwardingの機能がある。これを使うと簡単にsocksサーバとして動作するようになる。
これを使って、上図のtarget.appのような外部から閉じた環境へブラウザでアクセスするといったことができるようになる。
アクセスできるか確認コマンドライン
実際にログインできるかどうかただsshでアクセスしてみる。
ssh podhmo@target.app.net
これでログインできなかったら設定を見直す。(-v)とかつけて実行してみるとエラーの原因が分かるかもしれない。
sshでログインができるようになったら、前述したsocksサーバを立てる。
ssh -D 1080 -N podhmo@target.app.net
Dに渡したポート番号(省略すると1080)でsocksサーバが立ち上がる。(Nつけて良いと思う。-fはおこのみで)
これが実際に動いているかどうか確かめたい。GUIベースのブラウザは確認が面倒なのでコマンドラインで調べる。curlを使う。
## ちなみにこのオプションの指定方法は古い。あとsocks4ではなく、socks5かもしれない。 curl --socks4 localhost:1080 localhost:8000 curl --socks4a localhost:1080 localhost:8000
200っぽいメッセージが返ってくるか調べてみる。
socks4aはホスト名の解決がリモート先のホストで行われるし。aなしのsock4はホスト名の解決がアクセス元(local)のホストで行われる
(というわけで、上のsocks4の例はあまり意味がない。)
curlが動いたことを確認したらブラウザで確認する