UNIX的技術向上計画

UNIX系のOS。主にOpenBSDとUbuntuについて、自分のメモも兼ねて書いていきます。基本的に内容及びリンク先については保証致しません。ご了承ください。

X11転送を利用したセキュアなリモートapp環境

OpenSSH のX11転送を利用してセキュアなリモートGUI環境を作成します。

音声もSSHを通すので、セキュアです。

わかりやすくするために、サーバを「 server 」、 クライアントを「 client 」とプロンプトに表示します。

環境

OS: Ubuntu Desktop 14.10

アーキテクチャ: x86_64

今回はサーバ・クライアント両方共おなじOSを利用しますが、 UNIX系であれば、他のOSでもあまり問題ないと思います。

準備

Ubuntuのデスクトップ版はSSHサーバがインストールされていないので、 インストールします。

[server]$ sudo apt install openssh-server

また、軽量化のために Lubuntu にします。 (最初からLubuntuをインストールしてもいいと思います。)

[server]$ sudo apt install lubuntu-desktop

ufw を起動し、SSHのみ許可させます。

[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のポート転送を使用します。

これによって、セキュアになるのと同時に、 ufwSSHだけ開けておけばよくなります。

まず、サーバ側の音声を送信する設定を行います。

設定ファイルをコピーします。 (ディレクトリがない場合はあらかじめ作成します。)

[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 を使用します。

[client]$ ssh -f -N -R 4713:localhost:4713 server

最後に 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環境を構築することができました。

まだ問題はありますが、解決したら追記したいと思います。

参考資料・リンク

Ubuntu

Ubuntu Japanese Team

リモートサーバのサウンド出力を手元のPCで再生する

更新履歴

  • 2015/04/20 作成