xemacs over ssh

「xemacs over ssh」って言葉があるかわかりませんが…

やりたいこと

ローカルPCから別のサブネット内にあるプライベートアドレスをもったPC に接続して、そのPCで xemacsを起動して、ローカルPCに表示させる。

当然、brainから直接turingへは接続できません。一旦、laplaceに接続し てから、間接的に接続する必要があります。

[brain] ---X--> [turing]

[brain] ------> [laplace] ------> [turing]

解法

  1. laplace上でポートフォワーディングをして、 laplaceの特定のポートをturingへ飛ばしてやる。

    → 設定が面倒そう

  2. トンネルを設定して、VPNを構成する。

    → もっと設定が面倒そう

できたら、ローカルホスト以外のホストには手を入れずに、できないだろ うか?

アイディア

SSHにはポートフォワーディングする機能があるので、解法1と同様のこと ができそうです。しかも、ローカルホスト上で設定できそうです。

brain$ ssh -N -L 8022:turing:22 laplace &
これにより、ローカルホストのポート 8022を laplace を経由して、 リモートホストturingのポート22に接続することが可能になります。 -Nオプションが無いと、laplaceにログインしてしまうので、これを避ける ために入れておきます。

ローカルホストのポート 8022がポートフォワーディングされて、 turingのポート22に接続されているので、この状態で、turing上のxemacs を呼び出してみます。

brain$ ssh -p 8022 -f localhost xemacs
ローカルホストlocalhostのポート8022に接続して、xemacsを実行しているこ とに注意してください。 でも、turing上のxemacsが実行されています。

サンプル シェルスクリプト

#! /bin/bash
# [localhost]:22 -(ssh)-> [laplace:22] -> turing:22

LOCAL_PORT=8022

DEST_HOST=turing
DEST_PORT=22

VIA_HOST=laplace

PID=`ps augxw | grep -v grep | grep "ssh -N" | awk '{print $2;}'`
#echo $PID

if [ -z "$PID" ]; then
    ssh -N -L $LOCAL_PORT:$DEST_HOST:$DEST_PORT $VIA_HOST &
    sleep 1
fi
ssh -p $LOCAL_PORT -f localhost xemacs

とまあ、楽をするために、一所懸命努力して作りましたとさ。


Last modified: Wed Mar 7 17:21:21 JST 2007