仮想 SSH サーバー


Windows サーバーに SSH ポートフォワードで安全にリモートデスクトップをしたかったのですが, Windows に SSH サーバーをたてるのは少し面倒なので VMware Server で Ubuntu の仮想 SSH サーバーを作成してみました。

まずは仮想 SSH サーバーを構築します。

最初に OpenSSH をインストールします。

$ sudo aptitude install ssh

鍵交換方式でアクセスしたいので SSH サーバーを設定します。設定ファイルは /etc/ssh/sshd_config です。

PermitRootLogin no
PermitEmptyPasswords no
PasswordAuthentication no

PermitEmptyPasswords が意味のある設定なのかはよくわかりません。

鍵を作成します。

$ ssh-keygen -t rsa
$ mv id_rsa.pub authorized_keys  # 既に authorized_keys があるなら cat id_rsa.pub >> authorized_keys

生成された秘密鍵 authorized_keys は自分しかアクセスできないようにして保護し, USB メモリなどで物理的に持ち運びます。

$ chmod 600 id_rsa
$ cp id_rsa < 保存先>
$ chmod 600 authorized_keys
$ cp id_rsa < 保存先>

これで仮想 SSH サーバーはできました。次にホスト OS に対して SSH ポートへのアクセスがあったら仮想 SSH サーバーにポートフォワードするようにします。

まず前提として仮想 SSH サーバーの接続は NAT です。 VMware Server の Virtual Network Editor で NAT のタブを開き, NAT グループの Edit ボタンから NAT Settings ダイアログを開きます。 Settings グループの Port Forwarding ボタンでダイアログを開き, Incomming TCP Ports の Add で Host Port にホストが未使用の適当なポート番号を入力し, Virtual Machine IP Address に仮想 SSH サーバーの IP アドレスを入力し, Port に 22 を入力します。 Description は適当に SSH とでも入力すれば良いでしょう。

Host Port で指定したポートに TCP アクセスできるようにファイアウォールを設定します。 Windows ファイアウォールの場合はポートの追加で指定したポート番号と TCP を指定すれば良いです。

これでサーバーの設定は完了です。後はトンネルを掘ってクライアントから接続をします。

$ ssh -i < 鍵ファイル> -L < ローカルポート番号>:< 仮想ネットワークのゲートウェイ IP アドレス>:3389 -l < 仮想 SSH サーバーのユーザー> 
$ rdesktop -a 16 localhost:< ローカルポート番号>

例えば SSH サーバーのユーザー名が digger, Windows の IP が 192.168.1.21,仮想ネットワークのゲートウェイが 192.168.2.2 で,ローカルのポート番号 13389 に接続したいなら次のようになります。

$ ssh -i id_rsa -L 13389:192.168.2.2:3389 -l digger 192.168.1.21
$ rdesktop -a 16 localhost:13389

上の例ではリモートデスクトップですが,もちろん他のマシンに対して SSH で接続することもできます。仮想サーバーなので一度設定してしまえば後はファイルをコピーしてしまえば他の場所でも使用できます。さすがに鍵は作り直した方が良いと思いますが。

仮想化技術って便利ですね。