SSHFS
sshfs を使うことで (SSH でアクセスできる) リモートシステムをローカルフォルダにマウントすることができます。ツールを使ってマウントしたファイルを様々に操作することが可能です (コピー、名前を変更、vim で編集など)。基本的に shfs の代わりに sshfs を使うことが推奨されます。shfs の新しいバージョンは2004年からリリースされていません。
インストール
公式リポジトリから sshfs をインストールしてください。
マウント
ディレクトリをマウントする前に、対象のディレクトリのファイルパーティションが正しく設定されているか (ユーザーがアクセスできるか) 確認してください。マウントするには、sshfs
を実行してリモートディレクトリをマウントします:
$ sshfs [user@]host:[dir] mountpoint [options]
例:
$ sshfs sessy@mycomputer:/remote/path /local/path -C -p 9876 -o allow_other
-p 9876
はポート番号、-C
は圧縮の使用、-o allow_other
は root 以外のユーザーの読み書きの許可です。
必要であれば、SSH はパスワードを尋ねます。何度もパスワードを入力したくない場合は、SSH 鍵を読んでください。
アンマウント
リモートシステムをアンマウントするには:
$ fusermount -u local_mount_point
例:
$ fusermount -u /mnt/sessy
Chroot
(特定の) ユーザーをディレクトリに閉じ込めたい場合、/etc/ssh/sshd_config
を編集してください:
/etc/ssh/sshd_config
..... Match User someuser ChrootDirectory /chroot/%u ForceCommand internal-sftp #to restrict the user to sftp only AllowTcpForwarding no X11Forwarding no .....
ヘルパー
sshfs ファイルシステムを頻繁にマウントする必要がある場合、sftpman などの sshfs ヘルパーを使うと良いでしょう。
コマンドラインと GTK のフロントエンドが入っており、マウントやアンマウントをワンクリックで行うことができるようになります。
自動マウント
起動時や、必要に応じて (ディレクトリのアクセス時に)、自動マウントを行うことができます。どちらにしても、セットアップは /etc/fstab
で行います。
必要に応じてマウント
/etc/fstab
エントリを使うことで systemd でオンデマンドのマウントを行えます。
例:
user@host:/remote/folder /mount/point fuse.sshfs noauto,x-systemd.automount,_netdev,users,idmap=user,IdentityFile=/home/user/.ssh/id_rsa,allow_other,reconnect 0 0
ここで重要なマウントオプションは noauto,x-systemd.automount,_netdev です。
- noauto で起動時にマウントしないように設定します。
- x-systemd.automount によって必要になったときにマウントします。
- _netdev はブロックデバイスではなくネットワークデバイスであることを指定します (_netdev がないと "No such device" エラーが発生します)。
起動時にマウント
/etc/fstab
で sshfs を使ってリモートのファイルシステムをマウントする例:
USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs defaults,_netdev 0 0
fstab の行の例:
llib@192.168.1.200:/home/llib/FAH /media/FAH2 fuse.sshfs defaults,_netdev 0 0
ユーザーの SSH 鍵を使っている場合、自動的に動作するようになります。SSH 鍵を見て下さい。
複数のユーザーで sshfs を使いたい場合:
user@domain.org:/home/user /media/user fuse.sshfs defaults,allow_other,_netdev 0 0
マウントする前にネットワークが有効になっていることを確認するために _netdev マウントオプションを設定することが重要です。
ユーザーアクセスのセキュア化
/etc/fstab
で自動マウントする場合、ファイルシステムは基本的に root によってマウントされます。デフォルトでは、通常ユーザーとしてアクセスして他のユーザーのアクセスを制限したいときに予期しない結果を招くことがあります。
マウントポイントの設定例:
USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs noauto,x-systemd.automount,_netdev,user,idmap=user,follow_symlinks,identityfile=/home/USERNAME/.ssh/id_rsa,allow_other,default_permissions,uid=USER_ID_N,gid=USER_GID_N 0 0
オプションの説明:
- allow_other - root 以外のユーザーが共有フォルダにアクセスすることを許可します。
- default_permissions - カーネルからパーミッションを確認することを許可します。リモートファイルシステムの実際のパーミッションが使われます。allow_other によって許可されたユーザー以外にも制限的なアクセスを許可します。
- uid, gid - ファイルの所有権を特定の値に設定します。uid にはユーザーの ID、gid にはユーザーのグループ ID を指定します。
オプション
sshfs はローカル・リモートのユーザー ID を自動的に変換することができます。
idmap オプションを user に設定することで接続するユーザーの UID が変換されます:
# sshfs -o idmap=user sessy@mycomputer:/home/sessy /mnt/sessy -C -p 9876
上記のコマンドはリモートのユーザー "sessy" の UID をプロセスを実行しているローカルユーザーにマッピングします (上記の例では "root")。GID は変わりません。UID と GID 変換を細かく制御する必要がある場合、idmap=file オプションと uidfile と gidfile を見てください。
トラブルシューティング
チェックリスト
SSH のチェックリストを最初に読んで、以下を確認してください:
1. SSH ログインでサーバーの /etc/issue
ファイルから情報を送信している場合、SSHFS が混乱してしまいます。サーバーの /etc/issue
ファイルは無効にしてください:
$ mv /etc/issue /etc/issue.orig
2. ウェブ上の SSH 関連のトラブルシューティング記事のほとんどは Systemd を考慮していません。/etc/fstab
の定義が sshfs#user@host:/mnt/server/folder ... fuse ...
から始まる間違ったものであることはしばしばで、user@host:/mnt/server/folder ... fuse.sshfs ... x-systemd, ...
が正しい構文になります。
3. サーバーのソースフォルダとコンテンツがサーバーのユーザーによって所有されていることを確認してください。
$ chown -R USER_S: /mnt/servers/folder
4. サーバーのユーザー ID とクライアントのユーザー ID が異なっている可能性があります。当然ユーザー名は同一である必要があります。クライアントのユーザー ID に注意してください。SSHFS は以下のマウントオプションで UID を変換します:
uid=USER_C_ID,gid=GROUP_C_ID
5. クライアントのターゲットマウントポイント (フォルダ) がクライアントのユーザーによって所有されていることを確認してください。SSHFS のマウントオプションで指定したユーザー ID と同じである必要があります。
$ chown -R USER_C: /mnt/client/folder
6. クライアントのマウントポイント (フォルダ) が空であることを確認してください。デフォルトでは SSHFS のフォルダを空でないフォルダにマウントすることはできませ。
7. /etc/fstab
で SSH 公開鍵認証を使って SSH 共有を自動マウントしたい場合、以下のように設定してください:
USER_S@SERVER:/mnt/on/server /nmt/on/client fuse.sshfs x-systemd.automount,_netdev,user,idmap=user,transform_symlinks,identityfile=/home/USER_C/.ssh/id_rsa,allow_other,default_permissions,uid=USER_C_ID,gid=GROUP_C_ID,umask=0 0 0
設定例:
SERVER = Server host name (serv) USER_S = Server user name (pete) USER_C = Client user name (pete) USER_S_ID = Server user ID (1004) USER_C_ID = Client user ID (1000) GROUP_C_ID = Client user's group ID (100)
クライアントユーザーの ID とグループ ID は以下のコマンドで確認できます:
$ id USERNAME
実際に /etc/fstab
に設定する行は以下のようになります:
pete@serv:/mnt/on/server /nmt/on/client fuse.sshfs x-systemd.automount,_netdev,user,idmap=user,transform_symlinks,identityfile=/home/pete/.ssh/id_rsa,allow_other,default_permissions,uid=1004,gid=1000,umask=0 0 0
8. チェックリストに追加するべきことが他にもあるのであれば追加してください。
ピアによって接続がリセットされる
- ホストネームを使ってリモートマシンにアクセスしようとしている場合、ドメイン名が解決できないのが原因かもしれないので、IP アドレスを使って接続してみてください。
/etc/hosts
を編集してサーバーの設定が正しいことを確認してください。 - デフォルトではないキーの名前を使っている場合、
-i .ssh/my_key
と指定しても意味がありません。-o IdentityFile=/home/user/.ssh/my_key
のようにキーのフルパスを使う必要があります。 sshfs_debug
オプションを追加することで問題の解決に役に立つ情報が得られます (sshfs -o sshfs_debug user@server ...
)。- 何も有用な情報が得られないときは、
debug
オプションも追加してみてください。 - sshfs で DD-WRT などが動作しているルーターに接続する場合、こちら に解決方法が載っています (dropbear にパッチをあてるかわりに sshfs コマンドで
-osftp_server=/opt/libexec/sftp-server
オプションを使うこともできます)。 - 古いフォーラムスレッド: sshfs: Connection reset by peer
- ユーザーを使ってサーバーにログインできることを確認してください (特に AllowUsers を使用する場合)。
/etc/ssh/sshd_config
でSubsystem sftp /usr/lib/ssh/sftp-server
が有効になっていることを確認してください。
Remote host has disconnected
sshfs を使おうとした直後にこのメッセージが表示される場合:
- まずリモートマシンに sftp がインストールされていることを確認してください。インストールしていないと、動作しません。
- それから、リモートマシンの
/etc/ssh/sshd_config
に記載されているSubsystem
のパスが正しいかどうか確認してください。パスはfind / -name sftp-server
で確認できます。
Arch Linux では /etc/ssh/sshd_config
のデフォルト値は Subsystem sftp /usr/lib/ssh/sftp-server
です。
Thunar と FAM のリモートファイルの問題
リモートフォルダが表示されず、ホームディレクトリに戻ってしまう場合、あるいは Thunar で他のリモートファイルにアクセスできない場合、FAM を gamin で置き換えてください。Gamin は FAM の後継です。
アプリがフリーズする (例: Nautilus, Gedit)
アプリケーションがフリーズする (反応しなくなる) 場合、~/recently-used.xbel
の書き込み権限を無効化する必要があるかもしれません:
# chattr +i /home/USERNAME/.local/share/recently-used.xbel
詳しくは次の バグレポート を見て下さい。
sshfs をマウントされているときにシャットダウンでフリーズ
sshfs を手動でマウントして、シャットダウン前にアンマウントしていなかった場合、systemd がシャットダウン時にフリーズすることがあります。この問題を解決するには、以下のファイルを (root で) 作成してください:
/etc/systemd/system/killsshfs.service
[Unit] After=network.target [Service] RemainAfterExit=yes ExecStart=-/bin/true ExecStop=-/usr/bin/pkill -x sshfs [Install] WantedBy=multi-user.target
そしてサービスを有効化します: systemctl enable killsshfs.service
fstab によるマウントの問題
詳細な出力を得たい場合、マウントオプションに以下を追加してください:
ssh_command=ssh\040-vv,sshfs_debug,debug
mount -av
を実行してデバッグ出力を確認するために、以下のオプションを削除してください:
noauto,x-systemd.automount
参照
- How to mount chrooted SSH filesystem, with special care with owners and permissions questions.
- SSHFS – Installation and Performance — NFS との比較と最適化ヒント。