やっとOpenSSH for Windows経由でRDPができた。メモを残す。
RDP(リモートデスクトップ)は基本的に、デフォルトのポート3389同士をあけておけば、RDPサーバーとなるWindowsをクライアントWindowsからリモートで接続して使える。
しかし、インターネットごしだと無用心なので、SSHのポートフォワーディングという機能を利用して、「トンネル」を作る。我が家のインターネットで正式に外部に向かってあけているポートはこのSSHだけ。
なお、ここでの前提はインターネットに22番ポートをあけ、SSH通信ゲートウェイとRDPしたいマシンが同じであることとしてます。
SSHによる公開鍵と秘密鍵を使ったユーザ認証
SSH1の話は完全に無視。SSH2のありがたいところは、パスワードの代わりに公開鍵と秘密鍵を利用することが出来る。
パスワードのように、パスフレーズというものを使うが、これは秘密鍵を使うための鍵と思っておけばいいだろう。
もちろん、あらかじめ公開鍵と秘密鍵のペアを作成し、接続するSSHサーバ側にクライアントの公開鍵を登録しておく必要がある。クライアント側が秘密鍵をもつ。この鍵で暗号化されたパスワードのやり取りが終われば、通常のDES3で暗号化される。素晴らしい!
(きちんと確かめていないが、OPENSSHサーバーは共通鍵の置き方として、
サーバーが必ず見に行くところ/etc/authorized_keysファイルにリストしておく方法と、ユーザーのhomeディレクトリにおく方法があるようだ。私はもっぱら/etc/authorized_keysファイルに羅列する、鍵束方法を使っている。)
OpenSSHの導入方法
OpenSSHはもともとLinux上で動作する。Windows上で動作させようと思ったらCygwinというWindows上でUnixインターフェースを提供する大きなパッケージ群の導入の必要がある。
一度、俺もOpenSSH動かしたさに導入したが、ほんとにデカい。邪魔。
同じことを感じる人は多いらしく、「SSHをWindowsで動かすためだけに、CygWinを導入するのはバカらしいよね」とCygWinからOpenSSHが動作するために必要なパッケージを作りなおしてくれたのがOpenSSH for Windowsだ。だから完全にGNU下のオープンソース。ありがたや、ありがたや。私が知る限りだが、WindowsをSSHサーバーにするには最もメジャーなパッケージのようだ。(商用製品もあります)
http://micro-vnc.jp/pc/documents/sshwindows/#install
日立ソフト様が導入を丁寧に説明してくれてるので、「環境設定」の前までやる。
以下、コマンドプロンプトから。
0. > cd c:Program FilesOpenSSHbin
1.mkgroupコマンドで許可グループファイルをつくる。
(Windowsのローカルのみを許可)
> mkgroup -l >> ..etcgroup
2.ユーザーの権限ファイルを作る。
(Windowsのローカルのみを許可。つまりSSHではこのWindowsのログインユーザー名とパスワードを使うことを指定している。)
> mkpasswd -l -u username >> ..etcpasswd
*ココでusernameはサーバーマシンへログオンするためのユーザー名
ここまでは、ネット上によく出てる。
2. Configを変更。最低限以下をやる。
OpenSSHetcsshd_configを以下のようにかえる。
Protocol 2
# StrictModesとは、CygWinをCYGWIN=ntsecで動かしているモード
StrictModes no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile /etc/authorized_keys
最低限はこれだけ。保管する。
3.サーバー側で公開鍵と秘密鍵をRSAで作る。
(クライアント側で作るとまったく違う作業となる)
> cd ..bin
で、ssh-keygenプログラムがあることを確認
> ssh-keygen -t rsa
と入力し、キーファイルをdocument and settingのどこか、などと聞かれる。
そこで、
/etc/id_rsa
とこのとおり入力。
パスフレーズを二回(入力と確認)聞かれるので忘れないパスフレーズをいれる。
etc内に、ふたつのファイルができているハズ。id_rsaとid_rsa.pub
> copy id_rsa.pub authorized_keys
コマンドで登録リスト作成。(もし、公開鍵がいくつかある時はこのファイルにマージしていくこと)
id_rsaはクライアントで使う、秘密鍵なので大事にメディアの保存する。
4.これでサーバーは起動できる。
> net start opensshd
クライアント側
puttyが世界的に人気なので導入する。
http://www.sodan.ecc.u-tokyo.ac.jp/2002/article/tips/ssh/putty.shtml
日本語パッチを上書き
●PuTTYgenを使って鍵を変更。
OpwnSSH for windowsで作った鍵はそのままputtyでは使えないらしい。
id_rsaキーをPutty形式に変換する。
puttygenでloadする。作ったパスフレーズを入れると画面にimportedとでる。
SSH-2 RSAに際下段のラジオボタンがセットされているのを確認してから、"save private Key"ボタンをおす。ファイル名id_rsa.ppkで保管。
あとから、puttyのダイアログでファイルのありかを指定するので、安全なところならどこでもいい。
とりあえず、ここでputtyからログインしてみましょう。
Puttyの構成
IPアドレスいれて、SSHになっているか確認。
セッションに好きな名前をいれる。
SSHのタブで認証パラメータに先のppkファイルを指定し、ロード。
SSH-認証のところに、先のid_rsaのありかを登録。
SSH トンネルで、
3390 → 22 — Internet — 22 SSH サーバー → 3389 RDPホスト
を思い描いて設定する。リモートのRDPしたいサーバーのアドレスとポートを192.168.1.1:3389という感じで設定する。
セッションを「保管」しとくと、次回に便利です。
つながるとユーザーIDを聞かれるので入力。パスフレーズを入れて接続。もし、パスフレーズをなしにしておくと、ほんとうにパスワードなしで繋がる。
Puttyはこのまま。RDPを立ち上げると、Windowsのユーザーログインダイアログが出てくくる。(ハズ)
クライアント側ポートを3390としたのは、3389は別にローカルで使うかも知れないので避ける。トンネリングなので、インターネットごしであっても自分のところに出ているポートと接続する。クライアントデスクトップにlocalhost:3390でログインする。
※以上、足掛け2ヶ月かかった設定でしたが、SSHがとおる環境ならどこからでも我が家のWindowsを扱えるようになった。