fedora23サーバにWindows標準の「リモート デスクトップ接続」で接続できるようにします。

xrdpを使う

fedora23にはxrdpがあるので、dnf(yum)でインストールすれば基本的には終わりです。そのうえでこまごまとした調整をします。

セキュリティ向上

xrdpの通信内容はデフォルトで暗号化されていますが、ログイン方法はパスワード認証です。総当たり攻撃を受ける可能性があるので、公開鍵認証を用意します。

SSHでのトンネリングでも良いですが、OpenVPNで対象サーバとの通信は全部暗号化してしまうほうが管理が楽です。

http://blog.noldor.info/2016/01/fedora23-openvpn

firewalldポート開放

xrdpのデフォルトは3389/tcpです。

- name: xrdpポート解放(3389)
  firewalld: port=3389/tcp state=enabled permanent=yes
  notify: restart firewalld

OpenVPN以外からアクセスさせないように注意してください。私はConoHaのセキュリティグループで絞っています。

http://blog.noldor.info/2015/11/conoha-api-security-group

デフォルトロケール設定

xrdp接続画面のデフォルトは英語になっていましたので、/etc/default/localeに日本語として設定します。

# echo "LANG=ja_JP.UTF-8" >>/etc/default/locale

キーマップ修正

日本語キーボードとして認識させるためにkm-0411.ini等を設置する、という方法はすでに古くなっており、fedora23についてくるxrdp 0.9.0にはすでに設置されていますので最初から日本語キーボードとして動作します。

しかしMacにはないからでしょうか、なぜか「変換」キーと「無変換」キーを無視するキーマップになっています。私にとって非常に都合が悪い(「変換」キーでIMEのON/OFFをトグルするようにしています)ので、認識するように修正します。
キーマップの仕組みは実のところ理解していないのですが、xevコマンドでキー入力の様子を見ながら多分これで正しいんだろうと判断しています。

Pull Requestを投げておきました。⇒取り込まれました。新しいバージョンではこの作業は不要となるでしょう。

- name: キーマップ修正(km-0411.ini)
  replace:
    dest: /etc/xrdp/km-0411.ini
    backup: yes
    regexp: '{{item.regexp}}'
    replace: '{{item.replace}}'
  with_items:
    - { regexp: '^Key129=0:0$', replace: 'Key129=65315:0' }
    - { regexp: '^Key131=0:0$', replace: 'Key131=65314:0' }

- name: キーマップ修正(km-e0010411.ini)
  replace:
    dest: /etc/xrdp/km-e0010411.ini
    backup: yes
    regexp: '{{item.regexp}}'
    replace: '{{item.replace}}'
  with_items:
    - { regexp: '^Key129=0:0$', replace: 'Key129=65315:0' }
    - { regexp: '^Key131=0:0$', replace: 'Key131=65314:0' }

- name: キーマップ修正(km-e0200411.ini)
  replace:
    dest: /etc/xrdp/km-e0200411.ini
    backup: yes
    regexp: '{{item.regexp}}'
    replace: '{{item.replace}}'
  with_items:
    - { regexp: '^Key129=0:0$', replace: 'Key129=65315:0' }
    - { regexp: '^Key131=0:0$', replace: 'Key131=65314:0' }

- name: キーマップ修正(km-e0210411.ini)
  replace:
    dest: /etc/xrdp/km-e0210411.ini
    backup: yes
    regexp: '{{item.regexp}}'
    replace: '{{item.replace}}'
  with_items:
    - { regexp: '^Key129=0:0$', replace: 'Key129=65315:0' }
    - { regexp: '^Key131=0:0$', replace: 'Key131=65314:0' }