SSHFSを使用したLinuxでのリモートディレクトリのマウント
1. 概要
このチュートリアルでは、ツール sshfs を使用して、Linuxでリモートディレクトリをローカルにマウントする方法を見ていきます。
2. sshfs
sshfs は、リモートディレクトリをローカルにマウントできるLinuxコマンドラインツールです。 マウントされると、ユーザーは、フォルダーがローカルに存在するかのようにマウントポイントを操作できます。
舞台裏では、 sshfs はSSHのSFTPプロトコルを使用して、2つのノード間で必要なファイル送信を実行します。 したがって、リモートサーバーはsshdを実行しており、SSH接続を受け入れている必要があります。
2.1. インストール
UbuntuなどのDebianベースのLinuxにsshfsをインストールするには、apt-getを使用できます。
$ sudo apt-get install -y sshfs
同様に、 yum を使用して、CentOSなどのRHELベースのLinuxにsshfsをインストールできます。
$ sudo <span class="comment-copy">yum --enablerepo=powertools install fuse-sshfs</span>
RHELベースのLinuxでsshfsバイナリを取得するには、パッケージfuse-sshfsをインストールする必要があります。 さらに、フラグ –enablerepoを使用してpowertoolsrepoを有効にする必要があります。
2.2. 一般的な構文
一般に、sshfsコマンドは次のように表すことができます。
sshfs [user@]host:[dir] mountpoint [options]
sshfs の最初の引数は、SSHの仕様に従った接続文字列です。
[user@]host:[dir]
user 引数は、リモートサーバーにログインするためのユーザー名を指定します。 次に、 host 引数は、リモートサーバーのIPアドレスまたはドメインの値を取ります。 次に、オプションの dir 引数は、リモートディレクトリのパスを指定します。 値がない場合、sshfsは認証ユーザーのホームパスにマウントされます。
マウントポイント引数は、マウントが作成されるローカルパスです。 さらに、 mountpoint 引数で指定されたパスは、マウントする前に存在している必要があります。 最後に、このコマンドは、さまざまな構成を提供するオプションのフラグのリストを受け入れます。
2.3. 基本的な使用法
sshfs を使用してリモートディレクトリをマウントするには、最初に、マウントポイントとして機能するディレクトリをローカルノードに作成します。
$ mkdir -p /mnt/DATA
次に、sshfsを使用してリモートディレクトリをマウントします。
$ sshfs [email protected]:/tmp/DATA /mnt/DATA
[email protected]'s password:
基本的に、上記のコマンドは、マウントポイント / mnt /DATAをホスト192.168.1.16のリモートディレクトリ/tmp /DATAにポイントします。 さらに、ユーザーbobとしてホストに接続することを選択しました。 SSH仕様に従って、リモートはユーザーbobのパスワードの入力を求めます。
2.4. リモートディレクトリのアンマウント
マウントポイントをアンマウントするには、fusermountを使用できます。
$ fusermount -u /mnt/DATA
または、 umount を使用して、マウントポイントをアンマウントすることもできます。
$ umount /mnt/DATA
3. オプション
3.1. 別のポートを指定する
リモートサーバーが別のポートでSSH接続を受け入れている場合は、-pを使用してポートを指定できます。 たとえば、SSH接続のポートを2200として指定できます。
$ sshfs [email protected]:/tmp/DATA /mnt/DATA -p 2200
3.2. 自動再接続
接続が中断された場合、接続を自動的に再確立するようにsshfsを構成できます。
これを行うには、オプション -oreconnectを指定できます。
$ sshfs [email protected]:/tmp/DATA /mnt/DATA -o reconnect
3.3. 接続の遅延
sshfs を使用してマウントポイントを作成すると、接続がすぐに確立されます。 接続を遅らせるために、フラグ -odelay_connectを適用できます。
$ sshfs [email protected]:/tmp/DATA /mnt/DATA -o delay_connect
コマンドは、パスワードプロンプトなしですぐに戻ります。 これは、フラグ -o delay_connect により、接続がすぐに確立されないためです。 代わりに、マウント / mnt /DATAに最初にアクセスしたときに接続が確立されます。
4. ファイルの所有権とアクセス許可
sshfs は、リモートファイルとディレクトリのユーザーID(UID)とグループID(GID)を同等のローカル値にマップするいくつかの方法を提供します。 マッピングは、すべてのUIDとGIDをローカルで単一の値にマッピングするのと同じくらい簡単に行うことができます。 さらに、マッピングを指定するファイルを使用すると、マッピングをより動的にすることができます。
4.1. 所有者を単一のユーザーとグループに設定する
フラグ-ouidを渡すことにより、リモートディレクトリとファイルの所有者を単一のユーザーとグループIDに設定できます。 たとえば、フラグ -o uid = 1002 は、マウントポイント内のファイルとディレクトリの所有者をユーザー1002に設定します。
$ sshfs b[email protected]:/tmp/DATA /mnt/DATA -o uid=1002
[email protected]'s password:
$ ls -l /mnt/DATA
total 4
-rw-r--r-- 1 1002 alicegroup 11 Apr 10 14:28 bob-file.txt
-rw-rw-r-- 1 1002 alicegroup 12 Apr 10 14:28 joey-file.txt
さらに、フラグ-o gid を使用して、グループIDを単一のローカル値に設定することもできます。 たとえば、ディレクトリ内のファイルのグループIDを5005に設定できます。
$ sshfs b[email protected]:/tmp/DATA /mnt/DATA -o gid=5005
[email protected]'s password:
$ ls -l /mnt/DATA
total 8
-rw-r--r-- 1 alice 5005 11 Apr 10 14:28 bob-file.txt
-rw-rw-r-- 1 alice 5005 12 Apr 10 14:28 joey-file.txt
最後に、両方のフラグを指定して、ファイルのUIDとGIDを設定できます。
$ sshfs bob@ubuntu-box-p:/tmp/DATA /mnt/DATA -o uid=1002 -o gid=5005
[email protected]'s password:
$ ls -l /mnt/DATA
total 8
-rw-r--r-- 1 1002 5005 11 Apr 10 14:28 bob-file.txt
-rw-rw-r-- 1 1002 5005 12 Apr 10 14:28 joey-file.txt
4.2. UIDとGIDを動的にマッピングする
マッピングファイルに従ってリモートUIDおよびGID値をローカルにマッピングするには、オプション-o idmap =fileを渡します。 次に、フラグ -ouidfileおよび-ogidfileを使用してマッピングファイルを指定します。
たとえば、ホスト192.168.1.16のディレクトリ / tmp / DATA には、bob-file.txtとjoey-file.txtの2つのファイルが含まれています。
$ ls -l /tmp/DATA
total 8
-rw-rw-r-- 1 bob bobgroup 11 Apr 10 14:28 bob-file.txt
-rw-rw-r-- 1 joey joeygroup 12 Apr 10 14:28 joey-file.txt
まず、ホスト192.168.1.16上のbobとjoeyのUIDとGIDを決定する必要があります。 ユーザーのUIDを判別するには、コマンド id を使用して、フラグ-uを渡します。
$ id -u bob
1001
$ id -u joey
1002
同じコマンドidを使用して、フラグ -g を指定することにより、ユーザーのGIDを取得できます。
$ id -g bobgroup
201
$ id -g joeygroup
202
次に、リモートUIDとGIDをローカル値にマッピングするために、マッピングルールをローカルで作成できます。 ルールは特定の形式で指定されます。
local-username:remote-uid
この例では、リモートユーザーbobをローカルユーザーaliceにマップし、リモートユーザーjoeyをローカルユーザーamyにマップします。
$ cat > uid-mapping <<EOF
alice:1001
amy:1002
root:0
EOF
上記のコマンドは、コマンドcatおよびheredocを使用して、マッピングルールをファイルuid-mappingに書き込みます。
同様に、グループIDマッピングファイル gid-mapping を作成して、リモートグループをローカル値にマッピングできます。
$ cat > gid-mapping <<EOF
alicegroup:201
amygroup:202
root:0
EOF
次に、コマンド sshfs を使用してマウントポイントを作成し、uid-mappingとgid-mappingをマッピングのルールとして渡します。
$ sshfs [email protected]:/tmp/DATA /mnt/DATA -o idmap=file -o uidfile=uid-mapping -o gidfile=gid-mapping
フラグ-oidmap= file を使用して、コマンドsshfsにファイルを使用してマッピングを実行するように指示しています。 次に、フラグ -ouidfileおよび-ogidfileを使用してマッピングファイル名を渡します。
ローカルマウントポイントのアクセス許可情報を見てみましょう。
$ ls -l /mnt/DATA
total 8
-rw-rw-r-- 1 alice alicegroup 11 Apr 10 14:28 bob-file.txt
-rw-rw-r-- 1 amy amygroup 12 Apr 10 14:28 joey-file.txt
ご覧のとおり、権限はuid-mappingおよびgid-mappingファイルに従ってマッピングされています。
5. 結論
このチュートリアルでは、sshfsを使用してリモートディレクトリをマウントする方法について説明しました。 まず、DebianベースおよびRHELベースのLinuxのインストールガイドから始めました。 次に、リモートディレクトリをマウントおよびアンマウントする方法を確認しました。
次に、ツールが提供するいくつかのオプションについて検討しました。 最後に、コマンドの権限マッピング機能について説明しました。