Ubuntu Weekly Recipe

第40回クライアント・サーバ環境の活用(1)

Ubuntuのユーザの中には、複数のPCを利用されている方もいるでしょう。今回から数回に分けて、複数のPCを使いこなすユーザ向けのレシピをお届けします。今回は伝統的なUnix環境のノウハウが中心です。

リモートデスクトップ

複数台のマシンを利用している場合、第21回などで紹介したリモートデスクトップがもっとも単純な相互利用の方法です。大抵の環境ではリモートデスクトップだけで問題ないでしょう。具体的な設定方法は本連載の過去の記事を参照してください。

リモートデスクトップを使うことによる利点は幾つかありますが、主立ったものは次の通りでしょう。

  • 「使い慣れた環境」を複数のマシンから利用することができる。
  • クライアント側になるマシンの性能が低くても問題ない。

特に、クライアント側のマシンの性能が低くても問題ない、というのは大きなメリットになります。NetBook/NetTopといった低性能のマシン[1]や、古いマシンを流用する場合であっても、これらのマシンをクライアントとして使い、ある程度高性能なマシンに接続するのであれば快適に利用できます。

ファイルの共有

複数のPCを利用する場合、次のような点が問題になります。

データの共有ができない:

ローカルPCをあくまでリモートデスクトップクライアントとして(つまりシンクライアントのように)使うのであれば問題になりませんが、通常のデスクトップとして使いつつ、たまに他のマシンにリモートデスクトップに接続する、といった利用方法の場合、各マシン間でデータ(ドキュメント以下にあるファイルや、あるいはブラウザのブックマークといったもの)が揃わなくなっていきます。

ネットワークに依存してしまう:

リモートデスクトップはネットワーク越しの操作ですから、ネットワークが正常に機能していなければ利用できません。ネットワークが不安定な環境[2]では実用にならないでしょう。

この問題については簡単には解決できませんので、今回は扱いません。

NFSサーバ

Unix OSにおいて、もっとも容易なファイル共有方法はNFSです。あまりUbuntu的な解決策ではありませんが、容易に設定できるため、簡単なファイル共有としては非常に便利に利用できます。

ただし、セキュリティ的にはほとんど配慮されていませんので、クローズドなネットワークで利用する必要があります。

NFSサーバのインストールは次のように行います。

$ sudo apt-get install nfs-kernel-server

この状態でNFSサーバは動作しますが、一切ファイルを公開していない状態ですので、/etc/exportsに外部に公開したいディレクトリを定義します。ここでは、192.168.200.*というネットワークに対して/homeへのアクセスを提供しています。お使いのネットワークに合わせて設定を変更してください。

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync) hostname2(ro,sync)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt)
# /srv/nfs4/homes  gss/krb5i(rw,sync)
#
/home   192.168.200.*(rw,root_squash,no_subtree_check)

設定を反映させるため、NFSサーバをリロードします。

$ sudo /etc/init.d/nfs-kernel-server reload

NFSのクライアント側では次のパッケージを導入します。

$ sudo apt-get instlal nfs-common autofs

さらにクライアントに、/etc/auto.masterと/etc/auto.homeという設定ファイルを設置します。ここではNFSサーバになるマシンのIPアドレスが192.168.200.10であると仮定していますが、これもお使いの環境に合わせて変更してください。

/etc/auto.master
#
# $Id: auto.master,v 1.4 2005/01/04 14:36:54 raven Exp $
#
# Sample auto.master file
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# For details of the format look at autofs(5).
#/misc  /etc/auto.misc --timeout=60
#/smb   /etc/auto.smb
#/misc  /etc/auto.misc
#/net   /etc/auto.net

/nfs/192.168.200.10/home   /etc/auto.home
/etc/auto.home
*       -intr,tcp,nosuid 192.168.200.10:/home/&

設定を反映させるため、クライアントのautofsサービスをリロードします。

$ sudo /etc/init.d/autofs reload

この状態で/nfs/192.168.200.10/home/にアクセスすると、192.168.200.10のマシン上のhomeディレクトリ以下にアクセスすることができます。複数のマシンを登録したい場合、エントリをその数だけ増やすことで行えます。たとえば、192.168.200.10と192.168.200.20にあるマシンにNFSアクセスしたい場合、以下のようになるでしょう。

/etc/auto.master
/nfs/192.168.200.10/home   /etc/auto.home.10
/nfs/192.168.200.20/home   /etc/auto.home.20
/etc/auto.home.10
*       -intr,tcp,nosuid 192.168.200.10:/home/&
/etc/auto.home.20
*       -intr,tcp,nosuid 192.168.200.20:/home/&

また、WindowsXPや、Windows Vista Ultimate/Enterpriseをお使いであれば、Windows環境からNFSを見ることも可能です。これらの具体的な利用方法は今回は説明しませんが、SFU3.5をインストールする(WindowsXPの場合)か、もしくはSUAを利用してNFSクライアント機能をインストール(Windows Vistaの場合)してください。

sshの利用

ターミナルを中心に作業している方はすでにインストールし、活用しているかもしれませんが、ssh(openssh-server/openssh-client)を利用することでもファイルのやりとりが可能です。

$ sudo apt-get install openssh-server

各マシンにopenssh-serverをインストールしておくと、次のような機能が利用できます。

scpによるファイルコピー

SSHを導入することで、scpを用いたファイルコピーを利用することができます。scpの利用条件は単にSSHで相手ホストにログインできることだけですから、SSHを利用する環境では設定を行う必要がありません。

基本的には次のように、cpコマンドの代替としてscpを利用するだけです。

$ scp 192.168.200.10:Desktop/file ~/Desktop

また、これはコマンドライン以外からも利用することができます。⁠場所⁠⁠→⁠サーバへ接続..]を選び、⁠サービスの種類」としてSSHを選択し、サーバ名・フォルダ・ユーザ名を指定します図1⁠。このようにして接続することで、Nautilus経由で自動的にSSH接続を行い、通常のディレクトリと同じように閲覧することができます[3]⁠。

図1 SSHによる接続
図1 SSHによる接続

ssh-keygenとssh-agentによる認証

SSHは便利な機能ですが、scpのような方法で頻繁にコピーする場合に、その都度パスワードを入力する必要があります。scpを積極的に利用する場合、ssh-keygenを用いて鍵を生成し、認証手段として公開鍵認証を用いると良いでしょう。

公開鍵による認証を用いるには次のように行います。

まずssh-keygenコマンドを用い、鍵ペアを生成します。⁠Enter passphrase」⁠Enter same passphrase again」では秘密鍵のパスフレーズを入力してください。パスフレーズは「あなたにしか分からず、かつ、忘れにくいもの」にする必要があります。パスワードと異なり、スペースを含めることもできますので、充分に長く、そして忘れにくいものにしてください。目安としては10文字から15文字程度あり、辞書に掲載された単語が含まれていなければある程度安全だと言えるでしょう。また、生成した秘密鍵は他人に入手できないように厳密に管理してください。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/account/.ssh/id_rsa): 
Created directory '/home/account/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/account/.ssh/id_rsa.
Your public key has been saved in /home/account/.ssh/id_rsa.pub.
The key fingerprint is:
cd:13:da:2d:c9:9b:cc:c8:7f:06:83:9f:03:dd:a1:9f account@hostname
The key's randomart image is:
+--[ RSA 2048]----+
||
||
|                  .|
|                * +.|
|              SoOo..|
|             .o+==.|
|              oo== .|
|               .+ E|
|                .+|
+----------------+

ssh-keygenを行って生成されたファイルのうち、~/.ssh/id_rsa.pubにあるファイルを他のマシンの~/.ssh/authorized_keysに保存します。もっとも単純な方法は、次のように操作することでしょう。

client$ scp ~/.ssh/id_rsa.pub server:.ssh/id_rsa.pub.temp
client$ ssh server
server$ cd ~/.ssh
server$ cat id_rsa.pub.temp >> authorized_keys
server$ rm id_rsa.pub.temp

このようにしてauthorized_keysに登録することで、SSH接続時に鍵ペアを利用した認証を行うことができます。接続時に秘密鍵のパスフレーズを入力してください。

さらに、繰り返し認証を行わないといけない場合、次のように操作します[4]⁠。これにより都度パスフレーズを入力せずにscpを利用できます。

$ ssh-agent bash
$ ssh-add
(秘密鍵のパスフレーズを入力)
$ (scpなどの操作を行う)
$ exit

zshによるscp越しの補完

scpを利用する場合、シェル上ではパスの補完が機能しません。このような場合はzshを導入し、zshを利用することでscp時にも補完を機能させることができます。

まずzshをインストールしてください。

$ sudo apt-get install zsh

ssh-agentを起動する際、bashではなくzshを起動することで、補完を利用することができます。

$ ssh-agent zsh
$ ssh-add
(秘密鍵のパスフレーズを入力)
$ (scpなどの操作を行う)
$ exit

おすすめ記事

記事・ニュース一覧