SSH ポートフォワーディングによるトンネリング、2例

また、自分用のメモです。

以下のような環境があるとします。

  • ネットワーク外部からの SSH アクセスをうけつけるサーバがある。
    • ホスト名は miku (仮名) とします。
  • ネットワーク内部のみからアクセスできるサーバがある。
    • SSH ログインと HTTP アクセスを受け付けます。
    • ホスト名は luka (仮名) とします。
  • 外部からは negitoro.dyndns.example.com (仮名) で miku にアクセスできるとします。

以下は、外部の Mac OS X から miku の SSH を経由して luka にアクセスする操作の例のメモです。Linux でも同様になると思います。Windows は知らん。

HTTP のフォワーディング

Terminal.app で以下のようにオプションをつけて ssh ログインします。

Mac $ ssh -L 8080:luka:80 negitoro.dyndns.example.com
Last login: Fri Apr 22 19:32:44 JST 2011 from roadroller.example.co.jp on pts/1
miku $

ログインしている間は、Maclocalhost 8080 番ポートへのアクセスが、miku を経由して luka の 80番ポートにフォワーディングされます。

luka にあるファイルを Mac から Emacs の Tramp で編集する

Mac の ~/.ssh/config ファイルに以下の内容を追記します。

Host forwarding
HostName localhost
Port 22222

以下のようにオプションをつけて ssh ログインします。

Mac $ ssh -L 22222:luka:22 negitoro.dyndns.example.com
Last login: Fri Apr 22 19:32:44 JST 2011 from roadroller.example.co.jp on pts/1
miku $

ログインしている間は、Maclocalhost 22222 番ポートへのアクセスが miku 経由で luka の 22番ポートにフォワーディングされます。また、localhost:22222 には forwarding という別名で SSH アクセスできるようなります。

こうすると、Mac で動いている Emacs でファイルを開くときに /forwarding: というプレフィクスをつけることで、luka のファイルにアクセスできるようになります。