SSHFSを使ってSSH経由でリモートをマウント
出典: Wikimura
目次 |
はじめに
自宅サーバ(CentOS 5.3)でMediaWiki、Subversion、Tracを稼動させ、SSH経由でのみ利用できるようにしている。 結構便利なのだが、ストレージが非冗長なので怖い。 そこで、研究室のメンバに割り当てられたファイルサーバ(RAID1)をバックアップ先にしようと考えた。
ここで問題となったのが、どうやって自宅サーバのデータを研究室サーバへ保存するかということ。
専用のコマンド(svnsyncやtrac-adminのhotcopy)を使ってバックアップできれば好ましい。
しかし、研究室サーバにはこれらのコマンドがない(SVNはインストールしてもらったが、バージョンが1.4.2)上に、
勝手にいじることができないという制約がある。
研究室サーバのホームディレクトリを自宅サーバでマウントすることができれば、
研究室サーバの都合を気にせずバックアップを実行できる。
始めは研究室サーバのSambaが使えないかと考えたが、SSHはUDPをトンネリングできないらしい。
Windowsクライアントに限れば、ループバックアダプタやら仮想ネットワークやらを用いることで、SSH経由でのSamba利用が可能となるらしい。
しかし、Linuxの自宅サーバをクライアントとする場合この方法は適用できない。
そんな中、SSH経由でのSamba利用を調べていたページ「Gfarm over SMB over SSH」の下の方に、Linuxでのやり方のヒントが載っていた。
SSHFSと呼ばれるソフトウェアを利用することで、SSH経由で接続先のホームディレクトリ以下(?)をマウントできるらしい。
ここでは、これを使って研究室サーバをマウントし、SubversionやTracのバックアップをとる方法の流れをメモする。 具体的な内容は参考ページを参考にすること。
インストール(CentOS用)
ソフトウェアのインストールにはyumが便利で、SSHFSもyumから持ってくることができる。 yumがソフトウェアを検索する先(リポジトリ)に、RPMForgeを追加する必要がある。
鍵の作成
- クライアント(ここでは自宅サーバ)で鍵のペアを作る。
- 秘密鍵のパーミッションは厳しく設定すること(600?)
- 公開鍵のパーミッションは所有者以外も読めること(644?)
- 公開鍵をサーバ(ここでは研究室サーバ)に送る。
- 通常は、サーバのホームディレクトリ以下に「.ssh」という隠しディレクトリがある
- .ssh以下に authorized_keys というファイルがある。ここに公開鍵を追加することで、パスワード不要でアクセスできるようになる。
- くれぐれも上書きしないこと。追加モードにすること。
cat 公開鍵 >> authorized_keys
SSHクライアント設定
ここまでくればSSHFSを利用できるが、設定オプションを毎回書くのは面倒なので、設定ファイルを用意しておく。 この設定ファイルはOpenSSHの形式で記述する。
複数の接続先をHostオプション設定できる。Hostごとにログインユーザや秘密鍵、トンネリング設定などが行える。 SSHFSを使うにあたっては、ユーザ名と秘密鍵があれば充分。
参考ページに書いてあるが、このファイルの保存先は一般的に「~/.ssh/config」らしい。 またパーミッションは「所有者のみ読み書き可(600)」ですべきなので、これを守ること。
Host Kimura-lab.net User ユーザ名 IdentityFile 秘密鍵へのパス
マウント・アンマウント
設定ができれば後はマウントするだけ。
sshfs -F 設定ファイル ユーザ名@ホスト:ディレクトリ マウント先
- 設定ファイルへのパス: 予め作成したSSHクライアント設定ファイルへのパス。
- ユーザ名: 接続先でのユーザ名
- ホスト: 接続先(ここではKimura-lab.net)
- ディレクトリ: ユーザのホームディレクトリからの相対で、マウント元を指定する。省略した場合はホームディレクトリになる。
- マウント先: マウントもとの内容をローカルのディレクトリに対応付ける。空ディレクトリを指定する方が安全。
アンマウントするには以下を実行する。
fusermount -u マウント先
注意: まだ確認ができていないが、Subversionリポジトリのバックアップにおいて、マウント先に生成した一時ファイルのリネームが行われるらしい。
上記の方法でsshfsを起動すると既存ファイルのリネームができないため、「許可されない操作」とか「ファイルシステムエラー」というエラーが起こる。
これを解決するためには、以下のようにworkaroundオプションでrenameを有効化する。
これにより操作のアトミック性が保障されなくなるらしく、問題が起きる可能性があるかもしれないとのこと(多分大丈夫とは書いてある)。
しかし、自分のディスクスペースを一人で使う分には衝突は起きないので問題ないと思われる。
sshfs -F 設定ファイル ユーザ名@ホスト:ディレクトリ マウント先 -o workaround=rename
SVNリポジトリバックアップ
バックアップはsvnsyncでbackups以下のリポジトリをrepos以下のリポジトリに同期させることで行う。
Before:
/var/svn/repos/ 複数のリポジトリ
After:
/var/svn/repos/ 複数のリポジトリ
backups/ リポジトリ対応するバックアップ先 <--+
|
研究室: | マウント
/home/ユーザ名/svn/repos/ 元々あるリポジトリ |
backups/ バックアップ --------------+
注意: 「http ://」でアクセスしようとすると以下のようなエラーが起こる。Apacheがアクセス権の都合で見られないのかもしれない。 「file://」ならアクセス可能だが、パスワード(conf/passwd)が暗号化されない。 そのため、バックアップ用リポジトリはSVNサーバから開けないようにした方が好ましい。
svn: Could not open the requested SVN filesystem
Tracバックアップ
SVNリポジトリもセットでバックアップしないと意味が無いが、Trac自体は以下で簡単にバックアップを取れる。
/var/trac/projects/ プロジェクト
backups/ バックアップ先
trac-admin /var/trac/projects/プロジェクト hotcopy /var/trac/backups/バックアップ先

