VNC そのもの、SSH そのものの説明をする気はありません。詳しいサイトを探してください。その割にはなんか長いんですけどね。
2002-04
VNC はすでに十分に有名な GUI のリモートコントロールシステムです。私自身も最初にこれに触れてみてから早や数年が経ちましたが、これまでこの VNC をリモートメンテナンスツールとして本格的に使おうとはあまり思いませんでした。理由はまず第一に遅いこと。次にセキュリティ的にあまりよろしくないことです。セキュリティは特にアレで、VNC viewer で適当に叩けば接続のダイアログがクライアント側に出てきてしまうので特別なツールなんか持ってなくたって手当たり次第にやってればなんとかなりそうだし、重たい通信が生のまま流れている(らしい)し、デフォルトだとなぜかコネクションがあとからの人が優先されてしまうのでぶん取られたらおわり、という非常に困った感じでした。
まぁなんか目の届く範囲のマシンを手元で操作して喜んでおしまい、みたいなそんな感じです。
SSH というのをまともに使い始めたのは VNC に初めて触ったあとでありまして、SSH の便利な port forwarding によってセキュアな VNC が実現できたり、SSH の圧縮で多少速くなるんじゃねーか、みたいなことを知ってちょっと嬉しくなったりしました。
しかしその辺をもう少し高度に使いこなすためには Windows の場合はレジストリにタッチせねばならず、まぁ別に今さらレジストリをいじるのが怖いとは言いませんが、イマイチなんかこう、釈然としないものは感じます。いきなりレジストリっすか、と。レジストリエディタの操作性だってよくないしね。
(Windows の話になるのは、UNIX の場合、別に VNC でなくたって外からいじる方法があるからです。)
で、やっぱ遠隔で本格的にメンテするにはどう考えてもより高速な VNC 環境が必要だなということでもうちょっと調べました。するとやっぱあるんですね、そういう要求は。すでに本家でもいろいろ「拡張」として zlib 圧縮もあるのですが、さらに速い tight エンコードを引っさげた TightVNC というものがありました。
なんとこれはレジストリエディタを使わなくても LocalLoopback とかこちらの要求する設定ができるじゃないですか。これはいい。
インストールも本家版 VNC のように vncviewer を使うだけならインストーラは必要ないとか、そういう違いはなく、ハナからインストーラを使います。インストール先は本家版とは違う場所がデフォルトで指定されるので、これと言って考えることは何もないです。ただし、レジストリを共用するので本家版と TightVNC で違う設定を使い分けたいという要求は無理です。逆に今まで本家版を使っていて TightVNC に移行しようという場合は何もせずに設定を引き継いでくれるのでカンタンです。
インストールされた TightVNC のメニューも
VNC Viewer の設定が3つあるのでその分メニューが増えているだけで、何の違和感もありません。
具体的な転送速度ですが、めっちゃはぇぇ!ってことはないですが、「これはどうかなー」と思われる重さが、「あ、これなら我慢できる。」程度にはなります。どっちにしろ遠隔の GUI が重いことには違いありません。
設定はスピードに直接関わるエンコード方式の選択が増えています。
JPEG 圧縮もできますが、操作するリモートの画面がノイズだらけになるのはなんか気持ち悪いので個人的にはオススメしません。それよか強制的に8ビットカラーの色情報しか転送しない方が効果があるんじゃないかと思います。
Advanced が加わっているのが大きな特徴です。
で、これを押すと
こういうのが出てくるので、ポートフォワードで使おうと思う場合(SSHもそのマシンの上で動かす場合)は AllowLoopback のチェックを入れてください。うーん、レジストリエディタを使うより数段楽だ。
ポートフォワード以外での接続を許可しない(その方が LAN 内からのいたずらを制限できる)場合は loopback ONLY の方にもチェックです。
今回ちまたにたくさんあるのにわざわざ VNC を書いているのはこの逆方向 SSH port forward があるからなのです。こんなんでもなきゃわざわざ新しく VNC を取り上げたりしませんて。
SSH port forward というのはあちこちに書いてあるので今さらくり返しませんが、要するに SSH で掘ったトンネルの中に vnc のセッションを張ることで、暗合化した安全な通信の VNC を使う、っちゅーことです。こうすると何が嬉しいって、ネットワーク上で覗き見している人たちに VNC での操作の様子が分からない、何よりパスワードがばれるようなやばい事態にならない、っちゅーことです。
もっともパスワードはあまりに簡単ならアタック掛けられておしまいっちゅー話ですが。パスワードそのものが分かりにくいものになっていないと通信技術の段階で安全にしても基本的に意味はありません。
で、やることは
こういう感じ。
|
|
要するに通常紹介される SSH + VNC のリモートコントロールとは SSH の方向が反対なのです。
ttssh の forward 設定だと見慣れない
こういう設定を使う。
OpenSSH の場合は
-R port:host:hostport
ということです。
リモートコントロールされる側(つまり VNC server を動かすマシンのある側)で SSH クライアントに対して、リモート→ローカルの方向にフォワードするように設定します。
SSH クライアントを動かすマシンと VNC server を動かすマシンは同じである必要はありません。多くの場合は同じになるかなーと思いますが。
なんでこんなことやるかっていうと、SSHd を立てられるのは、SSH のインストールができることはもちろん、ファイヤーウォールが立ってないか、あるいはその設定を自分やネットワーク管理者が変更できることが前提。また IP アドレスが固定になっているか Dynamic DNS になっているか、いずれにしてもサーバとして動作させるに必要な諸々の条件が絡む。要するに初心者には荷が重い。
でも安全な遠隔操作をしてもらうメリットは初心者に対しても十分に大きい、むしろ熟練者よりも大きいです。
逆に VNC server への接続は SSH が勝手に確立してくれるので、server がダイアルアップ接続だろうがファイヤーウォールの中にいようが関係ない。
その辺がこの逆方向 port forward のメリットです。
簡単に言えば、SSH server の立っているところがリモートサポートセンターのような感じになるわけです。で、ユーザーにはセンターへ SSH で接続してもらうことで、センター側から安全な通信でリモートコントロールしてもらえる、と。センター側では Windows の使い方がよく分からないから目の前で見せてくれ、とか、やり方が分からないから代わりにやってくれ、といった要求に応えることができるようになります。
(このリモートメンテのアイディアは以前バイトしていたところのものなので、私のオリジナルではありません。残念ながらその会社は今は存続していないので、アイディアの権利は誰のものでもないような…。)
コントロールされるマシン上で SSH で繋ぐ設定を最初にすれば、あとはその人に SSH への接続さえやってもらえば(で、VNC server はサービスで動かしておく)あとは外部からトラブルの対処とかのメンテを行なうことが可能である、しかもそいつ(メンテされる機械)はダイアルアップとかの IP アドレスが固定でない環境でも、とにかくインターネットに繋がっていてくれればよい、ということです。
SSH のサーバは勝手に立ててください :) 立てられない人はこの方法は放棄してください。ポートフォワードを許可する設定をするのをお忘れなく。許可しないのであればこの方法は使えません。
PC 用のフリーの SSH クライアントとして有名なのは TeraTerm に SSH Extension をかませた ttssh とか nifty-telnet SSH などでしょうけど、困ったことに Windows や Mac で有名なこれらのソフトは SSH 1 にしか対応していません。SSH のプロトコルにはバージョン 1 と 2 があり(1.5 もあるけど無視)、1 にはセキュリティホールが見つかっているので本気でセキュリティを考えるならオススメしません。また、サーバのポリシーによって 1 は完全に閉じている場合もあります。
ま、その辺は SSH サーバの管理者に問い合わせてみてください。SSH 2 しか許可されていない場合でも SSH 1 用の説明を見ながら SSH 2 対応のクライアントを設定すればイケます。Web 上に日本語での細かい情報はあまり多くありませんが、SSH 2 対応のクライアントには PuTTY や Mindterm があります。Mindterm は Java プログラムで、Mac でも Windows でも動きますので,、同じノウハウが使えて楽かも。
フォワードの設定をするときに、フォワード先の設定にはホストを特定する項目があるのに、フォワード元の設定にはホストの設定は必要ないのか?と思うかもしれませんが、これは必要ありません。
SSH のポートフォワードはどこから接続されたかに関わらず、特定のホストの特定のポートにフォワードされます。フォワード先が SSH サーバと同じマシンである必要も全然ありません。Web で説明されている例が、ネットワークの規模も比較的小さめで SSH サーバとフォワード先のマシンが同じであることが多い、というだけでそういう風に決まっているわけではないのです。実際の通信の仲立ちを SSH クライアントとサーバのセットがやってくれるだけです。
リモートからローカルへのフォワードを設定します。
このときフォワードするポートは
になります。だから例えばスクリーンナンバー10番の vncviewer からの接続をフォワードしたければ 5910 をフォワードするっつーことになります。
フォワード先は実際に操作されるマシン、VNC server を動かすマシンです。
SSH クライアントと同じマシン上にあるなら 実際に割り振られている IP アドレスを使っても localhost や 127.0.0.1 などとしてもオッケーです。
いちばん注意しなければいけないのは、
SSH クライアントと VNC サーバが同じマシンに同居する場合は Loopback を許可する
ってことです。
VNC は通常では他のマシンからの接続を想定しています。
今回の方法は VNC server は SSH クライアントの動いているマシンから接続されるわけですが、この SSH クライアントが VNC サーバと同じマシン上で動いている場合はこの想定に反することになります。そこで設定を変更する必要があります。本家版 VNC を Windows で動かす場合はレジストリにタッチすることで、TightVNC を動かす場合はダイアログから設定します。(ここで TightVNC の速さ以外のメリットが生きてきます。もう一つは、GUI からログを取る設定ができるとこでしょう。)
接続を許可するスクリーンナンバーは動的に割り振っても固定にしても構いません。固定にしておいた方がフォワードの設定が確実に行なえますが。
vncviewer を使う場合はこれまで通り、しかし SSH サーバの動いているマシンに対して接続を行ないます。スクリーンナンバーは適宜指定してください。それでオッケー。特別な設定は必要ありません。ブラウザから繋げる場合は SSH サーバの動いているマシンのポート 58xx に接続してください。xx の部分がポート番号なのは前述の通り。
もちろん SSH サーバの動いているマシンに対して 58xx、59xx のポート番号での接続を直接行なえる環境、多くは同じ LAN 内にいる、ということが前提です。そうでない場合は以下の応用を読んでみてください。
SSH サーバをリレーに使ってリモートメンテ、なんつー技も使えます。
操作する側の SSH クライアントにローカルからリモートへの、よく見る方向でのフォワード設定を行ない、VNC クライアントでその SSH クライアントが動いているマシンに接続します。自分のマシンで両方動かす場合は VNC クライアントで localhost に接続するわけです。
そうすると自分の設定したポートフォワードと相手(操作される側)の設定したポートフォワードが連結されて、お互いがファイヤーウォールの中にいても、なんとなればお互いがダイアルアップでもリモートメンテが可能になります。もちろん SSH サーバに接続することが可能で、その SSH サーバがポートフォワードを許可していないとダメですが。
ついでに SSH サーバそのものをリレーさせることも可能です。でもそこまで行くとさすがに話が面倒ですし、現実にそんなことができるのか、あるいはやる意味があるのか、疑問です。
で、SSH ではなく Zebedee などの他のトンネルだけを目的にしたプログラムを動かした方がいいかなと思わなくはないのですが、(SSH はシェルを提供しちいますが、本当にトンネルが目的ならシェルは必要ないので)その辺はこちらの事情でちょっと紹介し切れません。Zebedee って、しかしいまいちマイナーですね。盛り上がりに欠けるというか。
Zebedee で逆向きにトンネルを掘る方法が分かりません(2004-05)。ssh 2 に対応した PortForwarder は RemoteForward の動きがまだおかしくて使えませんでした。むーん。
はじめに。このバージョンは OS X では使えません。(本家ってのは AT&T のことです。念のため。)
サーバ動作させたい場合は PPC が必要です。どうしても 68 を使いたい、Old Mac をサーバとして活用しているんだ、という場合は VNC ではなく Timbuktu などの従来からの有名な方法を採用してください。
で、VNC Server をインストールする AppleScript をダブルクリックするといろいろ怒られると思います。
実は簡単な話で、VNC Patches という機能拡張書類を機能拡張フォルダにインストールしようとしているのですが、このときにフォルダ名が英語環境に依存しているんです。これさえ分かればあとは簡単。手動でこの機能拡張書類を機能拡張フォルダに入れてやるだけ。
同様にコントロールパネルにもそのまま手で放り込んでやりましょう。
で、再起動。VNC Server を起動するとサーバ動作してくれるようになります。設定は VNC Controls をいじればなんとかなるでしょう(^^;
ただ、どういうわけか Win → Mac 方向の接続が途中でぶち切れたり、切断するときに Win 側の vncviewer が固まったり、悪さします。これ、有名な現象なんでしょうか?
というものがあります。確かに画面の変化の取得範囲、更新範囲も狭く、非常にきびきび動きます。例えばウィンドウ配置も固定で、特定のアプリしか使わないような場合、例えばエディタで文字を書いたりする作業は、まじめな話、その場で古い機械を使っているのではないかと思うくらいに速いです。本家版や TightVNC を使った経験があるならとても同じ VNC とは思えないくらいに速いです。
ただ、インストールに失敗したり、サービス化に失敗したり、勝手に VNC server の動いているマシンの画面の設定がおかしくなったりといった弊害もあります。試したんですが、TightVNC の方が完成度も高いのでそちらを常用することにしました。試してみると感動しますが、常用にいたるかどうかは微妙なところだと思います。XP 対応とかする気あるのかもよく分かりません。
VNC に関しては盛り上がりに欠けるのか、いつの間にかなくなってしまったサイトが、特に日本語関係は多く、なんだかちょっと残念な感じです。
あとは bookmark 参照。
本家は AT&T から分離しました。しかしここでは Mac 版はもう手に入りません。
高速化を図った VNC。zlib 圧縮もサポート。さらに速い Tight エンコードもサポート。Windows と UNIX をサポート。スピード比較なんかもあるので分かりやすいかも。Mac な人には使えませんが、インストールも簡単で速い TightVNC はオススメです。本家版ではレジストリを操作しないといけない設定も GUI で可能だし。
各種拡張を施した VNC。Windows, HP-UX, AIX, Solaris, Linux 用バイナリがあります。ヘルプデスクの業務効率のために拡張してるのかな? フリーダウンロードが可能なようですが、試していないのでよー分かりません。
TridiaVNC開発エリア。なんか更新がないようなんですけど、どうなんでしょう。ま、VNC 関係はだいぶ枯れてきたってことかな。
日本語情報はまずココ!でしょう。動作原理から学べます。
レジストリ周りなどかなり詳細に情報が揃っています。個人的には全部の文字がボールドになっているページは読みにくいのが難点ですが、かなり参考になります。
SUPER LABORATORY の記述。
最も一般的な ttssh + VNC を使った Windows からセキュアにサーバに繋ぐ方法とその概念の解説。ttssh って日本語版あるんすね。
オリジナルのバグもいくつか fix してるし、OpenSSL の fix にも追随してる。SSH1 しか対応していないのは本家と同じですが。
あまり数の多くない Mac での VNC の情報。OS X でもサーバ、クライアントとも専用のものがあるようですね。本家の Mac 版 VNC に Windows から接続すると途中で切れたり、コネクションを切るときに vncviewer が落ちたりするのでなんか気持ち悪いのですが、 OS X の場合はそんなことないのかな。(Classic アプリの VNC を OS X の Classic 環境で使うと Classic 環境自体が異常終了するようです。要するに非対応ってこと。)