本サイトではSoqAlbumというファイル転送サービスを展開しています。その宣伝も兼ねてラズパイで使えるファイル転送・共有方法について、いろいろ解説してきました。
vscodeでファイル転送はともかくとして(笑)、sambaはlinuxをファイルサーバーにする時によく使われる人気の高いファイル共有方式です。
今回解説するsshfsはsshを通してリモートサーバーのディレクトリをマウント、共有するものです。sshfsはsambaほどの人気はありませんが、普段の私はsambaはほとんど使っていなくて、もっぱらsshfsの方を好んで使っています。
sshfsの魅力は
- sshはどこでも使える。sshはlinux, macといったunix系OSの基盤技術で、加えてwindows 10からはmicrosoftが公式にサポートしている。
- リモート側(マウントされる側)にsambaのような設定が必要ない。
- 職場と自宅のような離れた拠点でも、sshが繋がる限りファイル共有が可能。
- ssh (secure shell)だけに、暗号化が万全そう。
- sshfsの土台であるfuseという技術は重要。fuseによって、ftpサーバーのマウントや暗号化ドライブといった様々な機能が実現する。また、fuseではsudoなしの素のユーザ権限でファイルシステムのマウントが出来る。
私がsshfsを好むのは、まず遠く離れたサーバーでもsshfs単体でマウントができることと、リモート側にsambaのような設定が必要ないことでしょうか。実際、私はラズパイにsambaを設定するのが億劫で、macからすぐそばに置いてあるラズパイにアクセスする時も、mac版sshfsを使ったりしていました。
一般的な使い分けで言えば、PCで作業をしている時に、wifiにおいたラズパイをファイルサーバーとして利用したいのであれば、ラズパイにsambaをインストールするのが正解でしょう。そうではなく、ラズパイやlinuxにログインして作業している時、ほかのlinux or macのファイルにアクセスしたい場合、ラズパイからsshfsでマウントすると便利だと思います。
そういうわけで、これからsshfsの解説を行っていくわけですが、ファイルを転送するだけなら、もっと手っ取り早くて簡単な方法があります。それが本サイトで展開中のSoqAlbumです。
- とりあえず、今すぐ2,3個のファイルをラズパイに送りたい。
- sshfsの設定を読んでみたけど、話がマニアック過ぎて泣けてきた。
- サブネットの奥にいてsshが届かない場所のPCにファイルを送りたい。
など、ファイル転送で困った時はsshfsではなくSoqAlbumを思い出しましょう。 スマホならQRコードで1分以内にラズパイに接続できますが、PCからラズパイでも2分ほどで十分です。詳しい情報をページの最後にまとめました。
マシン構成
2台のラズパイを用意して、片方のディレクトリを、もう片方のラズパイにマウントすることで、設定を検証しました。
ラズパイ以外でもunix系OS(linux, macOS)であれば、同じような設定が可能だと思いますが、macOSのfstabについて私は詳しくないため、ローカルについてはlinuxに話を限定して解説します(sshfsはmacでも利用可能で、私も手動でよく使っています)。
- ローカル: ラズパイ(一般的なlinuxでも可)
- リモート: ラズパイ(linux or macOSでも可), ホスト名、アカウント名を remoteuser@remotehost と表記
- ローカルからリモートに ssh remoteuser@remotehost でログイン可能。
- リモートのディレクトリ(remoteuser@remotehost:dir/)をローカルのマウントポイント(~/mnt/mountpoint)にマウント。
ここでremoteuserは、IPアドレス(192.168.1.23などの数の並び)もしくはホスト名(hostname.yourcompany.co.jpのようなアドレス)を表します。
リモートのディレクトリ名については絶対パス(remoteuser@remotehost:/home/remoteuser/dir/)でも相対パス(remoteuser@remotehost:dir/)でもどちらでも通ります。
sshfsをインストールする
多くのlinuxでインストールは簡単に出来ます。
sudo apt update
sudo apt install sshfs
sshfsを手動で操作して、リモートサーバーをマウントする
sudoは必要ないことに注意してください(sshfsのベースであるfuseは、一般ユーザーの権限でマウントできるよう設計されています)
# マウントポイントを作成
mkdir -p ~/mnt/mountpoint
# セキュリティー設定(所有者以外アクセス不可とする)
chmod 700 ~/mnt
# マウント実行、場合によりパスワード入力
sshfs remoteuser@remotehost:dir/ ~/mnt/mountpoint
~/mnt/mountpointに移動してファイルやディレクトリが自由に作成編集できることを確認してください。
~/mnt/mountpoint内部でls -lとするとファイルの所有者・グループの表示が自分とは別のユーザーになっている場合があるかと思います。これは見かけの問題で、実はls -lの表記に関わらず自分が所有しているファイルとして書き込みが出来るのですが、気になる場合はマウント時にオプションを追加してください。
sshfs -o idmap=user remoteuser@remotehost:dir/ ~/mnt/mountpoint
アンマウントする
アンマウント時もsudoは必要ありません。
fusermount -u ~/mnt/mountpoint
起動時に自動的にマウントする(/etc/fstab)
よく利用するリモートディレクトリであれば、毎回手動でマウントするのは面倒です。ここからは/etc/fstab にsshfsのエントリを加えて、マウントを自動化する方法を解説します。
sshをパスワードレス化する
手動のsshfsのときパスワードの入力を要求されたかもしれません。このパスワード入力はマウントの自動化の障害となりますので、sshのパスワードレス化(パスワード入力なしでsshが実行できるようにする)を行います。
パスワードレス化と言っても、パスワードゼロにするというわけではありません。非対称鍵暗号を導入して、秘密鍵による安全な通信を確保します。
sshのパスワードレス化については前回のブログポストにまとめました(といいますか、前回のポストは今回のポストのための前準備です)。
このページの設定をして
ssh remoteuser@remotehost
がパスワード入力なしで実行できることを確認してください。
fstabを編集
sshによるログインがパスワードなしで実行できることを確認したら、/etc/fstabを編集します。fstabはlinux起動時にマウントするパーティションを記述するファイルですが、sshfsのような仮想ファイルシステムのマウントについても記述することが出来ます。
ローカルユーザーpi用にリモートディレクトリをマウントするfstab設定を行います。
cd /etc
sudo cp -p fstab fstab.bk (バックアップ)
sudo nano fstab で以下の一行を追加。
remoteuser@remotehost:/home/remoteuser/dir /home/pi/mnt/mountpoint fuse.sshfs uid=1000,gid=1000,noauto,x-systemd.automount,_netdev,IdentityFile=/home/pi/.ssh/id_ed25519,allow_other,compression=no,follow_symlinks,kernel_cache,auto_cache,reconnect,ServerAliveInterval=60 0 0
sudo systemctl daemon-reload
sudo mount /home/pi/mnt/mountpoint
追加内容は一行に必ず収めてください。各内容について
- remoteuser@remotehost リモート側のユーザーとIPアドレス(もしくはホスト名)
- /home/remoteuser/dir マウントしたいリモート側ディレクトリ。
- /home/pi/mnt/mountpoint マウントポイント。ここではユーザーpiのホームディレクトリのmnt/mountpointにマウントする。
- uid, gid ローカルユーザーpiのユーザーID(UID)とグループID(GID)を指定する。UIDとGIDの調べ方については下記参照。
- /home/pi/.ssh/id_ed25519 パスワードレス化で作成した秘密鍵。id_rsaである場合も多いです。
マウント後、~/mnt/mountpointでファイル・ディレクトリの作成編集ができるか確認してください。
正しく機能するようでしたら、リブートしてみてください。リブート直後から~/mnt/mountpointにアクセスできるはずです。
ユーザーID(UID), グループ(GID)について
idコマンドを実行してUIDとGIDを調べられます。ユーザーpiのUID, GIDを調べたい時は、ユーザーpiでログインした状態で以下を実行してください。
id (リターンでコマンド実行)
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),...以下所属グループが続く。
この場合UIDは1000で(プライマリー)GIDは1000です(UIDとGIDは同じとは限りません)。これをfstabに設定してください。
以下は興味がある人はお読みください。
UNIXでは各ユーザーに固有のユーザー番号が振られていて、これをユーザーID(UID)と呼びます。/etc/passwdで各ユーザーのUIDが分かります。
ユーザーはいくつかのグループに所属していて、グループには固有のグループ番号(GID)が振られています。/etc/groupで、各グループのGIDとその所属ユーザーが分かります。
ユーザーは複数のグループに所属できますが、その中でも優先順位が高いグループがプライマリグループです。プライマリグループ名はユーザー名と同じになっていることが多いです(ユーザー名がpiであれば、プライマリーグループ名もpiであることが多い)
sshfsとsambaの合わせ技という手も
例えば自宅に置いてある何台かのPC(windows or mac)で作業していて、リモートにある社内のサーバーAに作業ファイルを集約したい場合、自宅の複数のPCそれぞれでサーバーAへのアクセス設定をするのは面倒かもしれません。そんな時は自宅に新たにラズパイを置き、sshfsをインストールして、サーバーAのディレクトリをsshfsでマウント。その後ラズパイにsambaをインストールして、sshfsでマウントしたディレクトリを自宅内で公開すれば、自宅の各PCからラズパイを経由して、簡単にサーバーAにファイルを書き込めます。
この方法のよいところは、各PCに新たなアプリのインストールが必要ないことです。vpnを使って社内と自宅のPCを一体化する方法もありますが、vpnを使った一台ごとの厳密なPC管理は面倒そうです。そもそもboxやvpnを社員に提供してくれる大手の会社であればよいですが、そうでなければ、ラズパイによるクイックハックでやり過ごすのは悪い考えではありません。linuxにはsshfs以外にもrcloneのような更に凶悪なツール(?)もあります。linuxの知識が増えれば増えるほど、ゲリラ的なファイル共有の技の数も増えていきます。それをあの安価でコンパクトな筐体で実行できてしまうわけですから、ラズパイはいろいろな意味で危険なデバイスと言えるでしょう(笑)。
SoqAlbum(無料)なら設定ゼロで今すぐファイルが転送できます
今日説明しましたようなsshfsやsambaのハックが大好きな変人(私のことです)ならば話は別ですが、例えば2個とか3個とかのファイルを送るのにラズパイの設定ファイルをいじるのは、割に合いません。そんなときは設定ゼロでファイルが送れるSoqAlbumを選びましょう。
ラズパイはもちろん、win, mac, linux, ChromeOSとiPhone, androidのどのデバイスからもブラウザだけでスタートできて、どのスマホ・PCともアプリインストールなしで相互にファイルを交換できます。
SoqAlbumの概要とQRコードを使ったスマホのリンク方法について、以前の記事をどうぞ。
QRコードが使えないPCの場合は、こちらのやり方が便利。
SoqAlbumはMicrosoft Storeの公式アプリです。Windowsの方はMicrosoft Storeにアクセスしてアプリをゲットすればすぐにファイルを交換できますよ。
コメント