研究室マシン設定メモ:その3

前にリモートのファイルシステムを sshfs + autofs の合わせ技でローカルマシンにマウントするメモを書いた気がする。 これ
このままでもよかったんだけど、ローカルデバイスのマウントは /etc/fstab に設定を書いて、 リモートのマウントは /etc/auto.sshfs に設定を書く、というのがスマートじゃない。なんかきもい。 そもそもローカル端末の root からログインしなきゃいけないので一般ユーザとして使うには微妙。 といっても自分のPCではユーザは自分一人だし root 権限もあるし、なんでもいいんだけどね。

そんなわけで今回は、リモートもローカルも /etc/fstab に設定を一本化して自動マウントすることを目指す。

autofs とさよならの準備

autofs のサービスを停止して、自動起動も切っとく。もう不要ならそっと remove。

$ sudo service autofs stop
$ sudo vi /etc/init/autofs.conf
#start on runlevel [2345] # ここをコメントアウト

念のため設定ファイルもコメントアウトしとく。
/etc/auto.master と /etc/auto.sshfs を必要に応じていじる。

/etc/fstab の記述

これでハマった。
目標は root ではなく一般ユーザの鍵ペアでログインできるようすることと、起動時に自動でマウントさせること。

必要な情報はそんなに多くなかった。
マウント元、マウント先、リモートにログインするためのユーザ情報と、秘密鍵の位置。
基本的にはこれらを fstab, sshfs の書式に従って並べていけばいい。

自分の場合のコマンド行全部をフルで書くと、

hirako@dio:/home/hirako /mnt/hirako fuse.sshfs delay_connect,idmap=user,uid=1000,gid=1000,IdentityFile=/home/hirako/.ssh/id_rsa,follow_symlinks,allow_other 0 0

ざっとこんな感じになる。UID, GID, 秘密鍵のパスなど適宜変更。
最初のフィールドがマウント元となるリモートディレクトリ。2つめがマウント先のローカルディレクトリ(autofs と違ってあらかじめ作っておく)。 3番目のフィールドはファイルシステムを書くところで、fuse.sshfs と書いておく。先頭フィールドに

sshfs#hirako@dio:/home/hirako

と書いた場合には fuse のみでOK。4番目のフィールドには fstab と sshfs のオプションを書く。ユーザ情報は id コマンドで取得できる。 秘密鍵のパスは ~/.ssh/config で設定していたとしてもきちんと書かないとダメっぽい。 follow_symlinks を入れるとリモートのシンボリックリンクを追跡するようになって幸せ。 allow_other を入れないと root とか他のユーザからアクセスできなくなる。場合によっては allow_root の方がいいかも。 終わりの2つのフィールドは普通の fstab の書式といっしょ。
他にも大量のオプションがあるが、まとまった情報はなかなか見つからない。

ユーザ情報と鍵パスの指定が1つ目の目標の肝だとすると、 2つ目の目標の肝は delay_connect オプションでした。 ネットワークが確立する前に自動でログインしようとすると当然エラーになるので、本来は _netdev オプションで便宜を図るそうなのだけれど、 これがうまく機能せず。 フォーラムにも同様の報告がいくつか上がっているけど原因は(僕の理解できる範囲では)不明。 代わりに delay_connect オプションを指定するといいとの助言があり、これがとりあえずの正解らしい。

おつかれさまでした

再起動して無事マウントできてたらホームディレクトリにでも適当にリンクを貼っておしまい。

近いうちにシステムファイルを SSD に引越して爆速 Ubuntu を誕生させる予定があるので、 今度はその話の備忘録を書きます。