X11転送を利用したセキュアなリモートapp環境
OpenSSH のX11転送を利用してセキュアなリモートGUI環境を作成します。
音声もSSHを通すので、セキュアです。
わかりやすくするために、サーバを「 server 」、 クライアントを「 client 」とプロンプトに表示します。
環境
OS: Ubuntu Desktop 14.10
今回はサーバ・クライアント両方共おなじOSを利用しますが、 UNIX系であれば、他のOSでもあまり問題ないと思います。
準備
Ubuntuのデスクトップ版はSSHサーバがインストールされていないので、 インストールします。
[server]$ sudo apt install openssh-server
また、軽量化のために Lubuntu にします。 (最初からLubuntuをインストールしてもいいと思います。)
[server]$ sudo apt install lubuntu-desktop
[server]$ sudo ufw enable
[server]$ sudo ufw allow proto tcp from 192.168.146.0/24 to any port 22
クライアントは、ufwを起動するだけです。
[client]$ sudo ufw enable
X11転送を許可させる
X11転送を許可させます。
ただ、Ubuntuの場合はデフォルトで許可する設定になっていたので、 確認するだけでいいです。
「/etc/ssh/sshd_config」の設定が、 下記になっているのを確認してください。
X11Forwarding yes
X11DisplayOffset 10
なっていない場合は設定を行ってください。
接続
クライアントからSSHで接続してください。 この時、「-X」オプションをつけてください。
[client]$ ssh -X server
接続できたら、ためしにアプリケーションを起動させてみてください。 問題なく起動するはずです。
[server]$ gedit
音声を送受信する
これで、遠隔のアプリケーションを操作できるようになりましたが、 音声は出ません。 そこで、 PulseAudio を利用して音声を送信します。
経路にはSSHのポート転送を使用します。
これによって、セキュアになるのと同時に、 ufwもSSHだけ開けておけばよくなります。
まず、サーバ側の音声を送信する設定を行います。
設定ファイルをコピーします。 (ディレクトリがない場合はあらかじめ作成します。)
[server]$ cp /etc/pulse/client.conf .config/pulse/
「 .config/pulse/client.conf 」の「default-server」を編集します。
default-server = 127.0.0.1
次にクライアント側の音声を受信する設定を行います。 設定ファイルをコピーします。
[client]$ cp /etc/pulse/default.pa .config/pulse/
「 .config/pulse/default.pa 」の「load-module module-native-protocol-tcp」を編集します。
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
これで設定ができたので、 PulseAudio を使用する準備が整いました。
通信経路を確保するために、SSH port forwarding を使用します。
最後に PulseAudio を再起動して設定を反映させます。
[client]$ pulseaudio -k [client]$ pulseaudio --start
[server]$ pulseaudio -k [server]$ pulseaudio --start
これで、音声も利用できるようになります。
既知の問題
[client]の PulseAudio 設定をちゃんと読み込んでくれない
なぜが、「default.pa」の設定を起動後に読んでくれないため、 面倒ですが、現在はまた PulseAudio の再起動を行うことで対応しています。
[server]$ pulseaudio -k [server]$ pulseaudio --start
重い
これはしょうがないです。
ブラウザ等で動画を見ることも可能で、 艦これも問題なく動きますが、 たまに重い時があります。
通信はローカル内ですが。グローバル環境を通した場合は、 遅延が問題になる可能性があります。
「$ ssh -X server」とするときに、「-XC」として、 パケットを圧縮する方法もありますが、 余計に、CPUリソースを食うため、 システムリソースに余裕のあるPCが必要になります。
まとめ
それなりに使えるリモートapp環境を構築することができました。
まだ問題はありますが、解決したら追記したいと思います。
参考資料・リンク
更新履歴
- 2015/04/20 作成