自宅インフラ(自宅サーバーとは言っていない)にWindowsマシンが必要になったので、さくらのVPS for Windows Serverを1つ契約、自宅や出先からVNCのGUIでグリグリできるように環境構築したのでメモ。さくらのVPSのコントロールパネルからVNC接続できるのですが、そのために毎回さくらのコントロールパネルにログインしたくないのと、さりとて家から生VNCはセキュリティ的にどうなのよということで、SSHポートフォワードを使ってVNC接続を暗号化してWindowsサーバーにログインするようにしました。最初の設定は、さくらのVPS コントロールパネルから行います。
■ Windows側の準備
■■ RealVNC ServerとPowerShell SSH Serverのダウンロード
まずはRealVNC Serverをココからダウンロードします。プライベートな用途(実験目的)なのでココでFreeプランのキーを取得します。PersonalプランやEnterpriseプランにするとRealVNCだけで暗号化できるのですが、Freeプランは漢の生パケットです。なので、次に挙げるPowerShell SSH Server を併用します。
TechNetマガジンで紹介されていたPowerShell SSH Server、こちらも商用版があるのですが、個人使用は無償(ただし複数人および同時に複数SSHセッションを張ることができない)なので、こちらからダウンロードします。
■■ RealVNC ServerとPowerShell SSH Serverの設定
RealVNC Serverのほうは、できることが少ないので気休め程度ですが、パスワードをかけるようにしておきましょう。PowerShell SSH Serverですが、次の項目にチェックを入れておきましょう。
[Service]タブ → 「Run as a Windows Service」
[Connection]タブ → 「Enable SSH Tunnel Support」「Enable SSH Reverse Tunnel Support」(SCPとSFTPはお好みで)
これら設定が終わったら、画面上部「Save Changes」をクリックし、「Start」または「Restart」をクリックします。
■■ Windows ファイアウォールの準備
アプリケーションの設定ができたら、Windows ファイアウォールに穴をあけます。コントロールパネルからWindows ファイアウォールをクリックし、「詳細設定」をクリックします。受信の規則にVNC Serverが2つ、PowerShell Server V6が1つエントリされているかと思います。
VNC Serverのプロパティですが、私は以下のように設定しました。
[詳細設定]タブ → プロファイルに「プライベート」「パブリック」の2つをチェック
[スコープ]タブ → リモートIPアドレスで「これらのIPアドレス」を選択し、自宅の固定IPアドレスと踏み台VPSのIPアドレスを登録
PowerShell Server V6のプロパティですが、接続元を絞る要件などがなければ何も弄らなくてOKです。
■ 自宅のPCから繋いでみる
まずは自宅のPC(Fedora)からWindowsサーバーに向けてSSHのセッションを張ります。
$ ssh -L 5900:<WindowsサーバーのIPアドレス>:5900 <Windowsサーバーのユーザー名>@<WindowsサーバーのIPアドレス>
上記のように、SSHのポートフォワーディングでlocalhostの5900番ポートをWindowsサーバーの5900番(VNCのポート)へ転送します。SSHのパスワード(Windowsのパスワード)を入力してログインすると、PowerShellのプロンプトが表示されます。
次に、VNCクライアントを立ち上げ、localhostへ接続しましょう。今回はChromeアプリのVNC Viewerを使いました。
Connectを押下したあと、「Unencrepted Connection」という警告が出ますが、SSHポートフォワードで暗号化しているので気にせず「Connect」をクリックします。次にVNCサーバーで設定したパスワードを聞かれるので、パスワードを入力してOKをクリックします。Windowsサーバーにログオンしていない状態ですと、以下のような画面になります(壁紙は趣味で変えましたw)
ここでCtrl+Alt+Delを押すわけにいかないので、VNC ViewerのソフトウェアキーボードでCtrl+Alt+Delを送信します。
ここでユーザー名を聞かれる段階になったら、ソフトウェアキーボードは閉じてしまって構いません(てか邪魔ですよね?)。画面下部のキーボードボタンをクリックして閉じます。
いよいよWindowsにログオンです。
ご覧のように、デスクトップが表示されました。ログオン成功です。自宅から生VNCで繋がっていないことをnetstatで確認してみましょう。
1行目のローカルアドレスがTCPの22番ポートですので、VNCではなくSSHが待ち受けていることがわかります。また、1行目の外部アドレスは画面上伏せていますが、自宅の固定IPアドレスになっています。他にESTABLISHEDになっている通信はlocalhostとリンクローカルアドレスなので、外部のホストから突かれていないことがわかります。(本当は野ざらしのVPSなので80番ポートや443番ポートが凄いことになっていましたが、Windowsファイアウォールで閉じました)
せっかくなので、SSHクライアントのほうも見てみましょう。
ご覧のように、PowerShellをSSH越しに実行しています。
これでWindowsサーバーを外から弄る環境ができました。意外と簡単ですね。でわ〜♪
