ircのサーバに踏み台を超えてポートフォワード
外部からアクセスできない場所にあるircサーバにlimechatでアクセスしたかったため、トンネルを掘って繋いだ。その副作用でいろいろ調べたのでわかったことや手順をメモ。
最終的には以下の設定を.ssh/configに書くことで解決
Host hostA HostName hostA.example.jp Host hostB HostName hostB.example.jp ProxyCommand ssh hostA -W %h:%p Host irc HostName irc.example.jp ProxyCommand ssh hostB -W %h:%p LocalForward 6667 localhost:6667
この設定をした状態で
$ ssh irc
とすればircサーバへ接続されて6667がircサーバの6667へ転送される。
↑の設定でやっていることとしては
ssh ircコマンド実行
→ProxyCommandが実行される=ssh hostB -W %h:%p
(%hはホスト名、%pはポート番号、-Wで転送の設定)
→ProxyCommandが実行される=ssh hostA -W %h:%p
→結果的にircサーバへログイン
→同時にLocalForwardの設定がなされる
(ここのlocalhostはirc.example.jpを表す)
という感じだと思われる。
ssh ircを行った際にポートがbindできないとなったためそれを使用するプロセスを調査
これは結果的には↑の設定をいろいろ試していたときに途中の踏み台とするサーバへのポート転送をしてしまってそれが残っていたのが原因だったが、プロセスを探す勉強になったのでメモ
$ lsof -i:6667 #ポート6667を使っているプロセスのPIDなどを表示 $ ps aux | grep <PID> #実行中のプロセスからPIDを含むものを表示
これでトンネルの設定はOKなのでlimechatを起動してアクセスしてみるがつながらず・・
なぜならlimechatの設定を変更していないから
当たり前の話だがローカルマシンの6667がircサーバの6667に転送されるようにしたので、limechatがアクセスする先の設定を変更する必要があった。しばらく気づかず。。。
limechatのServerタブのプロパティから接続先をlocalhostの6667として無事繋がる
ちなみにssh irc実行時は以下のようにオプションを付けると無駄にログインしない
$ ssh -Nf irc
疑問が一つ。これで繋がるということはProxyCommand自体は一つ一つリモートサーバ上で実行されてるわけじゃないということ?
参考ページ
・http://www.slideshare.net/tohakushi/ssh-13118950
・http://d.hatena.ne.jp/kaze-kaoru/20130204/1359979359
助かりましたー