SSHしか通らないサーバーで適当なポートに立ち上げたサービスにアクセスする

railsとかjsTestDriverとかJenkinsとか最近ではPHPのビルトインウェブサーバーもそうなんですが、コマンド一発サービス起動して後はブラウザからアクセスするだけで利用できるものがよくあります。
でも、サービスを起動したサーバーでは開けてるポートが限られてて結局使えない、とかいうこともままあります。

  ↓

ダイナミック転送SocksProxyでかいけつ!

(SSH接続にはPuTTYを使ってるものとします)

PuTTY + pfwd でダイナミック転送の設定

pfwd.iniの編集

puttyのインストールフォルダに pfwd_sample.ini ファイルがあります。
それをコピーして pfwd.ini を作成して編集。

編集を行なう部分を抜粋しました。

接続先サーバーの設定

[SSH]
; SSHサーバーアドレス
; PuTTYで保存したセッションの設定を使用する場合には@セッション名で指定します。
; 省略できません。
Host=dev.example.com

秘密鍵(.ppk)

; プライベートキーファイル (rsa, rsa2, dsa)
; ・省略時にはセッションに設定されているものが使われます
; puttygen.exeで作成(変換)したファイル
PrivateKey=C:\path\to\privatekey\hoge_dsa.ppk

ユーザー名

; ログインユーザ
; ・省略時にはセッションに設定されているものが使われます
User=calpo

ポート1080でダイナミック転送を行なう設定

;;=================================================
;; HOST4 Dynamic Forwarding
;;=================================================
01=D1080
pageant 実行

いつものようにpageant秘密鍵を指定しておきます。

pfwd 実行

これで、pfwdがlocalhost:1080で受けて、iniで指定したホストに転送を行なうようになります。

エラーなどあった場合こちらのページが参考になりました。
http://old.typemiss.net/blog/kounoike/20061019-100

ブラウザの設定

そして肝心のブラウザの設定です。

やろうとしていること
proxy.pac の作成

development-serverへのアクセスの場合のみプロキシを通すようにしたいです。
これにはスクリプトが使えます。

以下のようなファイルを作ります (名前は何でもいい)
proxy.pac

function FindProxyForURL(url, host)
{
	if (host == "development-server") {
		return "SOCKS5 127.0.0.1:1080";
	}
	return "DIRECT";
}
ブラウザの設定

プロキシの設定に先ほど用意したスクリプトを使うようにします。

  • Firefox の場合
    • ツール > オプション > 詳細 > 接続 > 接続設定
    • 自動プロキシ設定スクリプトURL にproxy.pacを指定 > 再読み込み
      • 例) file:///C:/etc/proxy.pac


  • Chrome の場合
    • スパナアイコン > 設定 > 詳細設定を表示... > ネットワーク > プロキシ設定の変更... > 接続 > LANの設定
    • 自動構成スクリプトを使用する にチェック
    • アドレス にproxy.pacを指定 > OK
      • 例) file:///C:/etc/proxy.pac

Firefoxで問題があった場合の追加設定

名前解決で問題があった場合はこちらが参考になりました。
http://www.knonline.net/d/?date=20080611

  • アドレスバーに「about:config」と入力して開く
  • network.proxy.socks_remote_dnsの項をtrueに変更する

準備完了

あとは dev.example.com サーバーでJenkinsなり何なり立ち上げて
http://development-server:8080/ とかでアクセスしてみましょう。