本記事では、SSH経由でファイルシステムをマウントする便利ツールsshfsが開発終了となったため、代わりにRcloneを使用することをご紹介します。Rcloneはさまざまなプロバイダーに対応しており、ローカルとクラウドストレージを同期することができます。設定や使い方の詳細については下記内容をご確認ください。
はじめに
みなさん、こんにちは。GMOインターネット株式会社の斉藤です。
ご存じの方もいらっしゃると思いますが、SSH経由でファイルシステムをマウントできる便利ツールsshfsが開発終了となりました。
https://github.com/libfuse/sshfs
拙訳: このプロジェクトは今後メンテナンス/開発は行われません。よって、GitHub issueとプルリクエストは無効になりました。下記のメーリングリストは利用可能です。このプロジェクトを引き継ぎたいのでしたら歓迎します。プロジェクトをフォークして開発を続けてください。6ヶ月に渡って有効な活動がある場合、私のメールアドレスまでコンタクトして下さい。喜んであなたにこのプロジェクトのオーナーシップ権限をお渡しするか、ここをフォークしたプロジェクトへのポインターにします。
リモートファイルシステムのマウントは、特に一時的な用途でとても便利です。開発中にリモートのソースコードが欲しいときにつかったり、サーバーのメンテナンス/移行作業などで大活躍します。
sshfsはとてもポピュラーで私もかなりお世話になりました。作者の方にはお疲れ様でしたと申し上げたいです。残念ながら開発終了の理由は探せませんでしたが、もしご存じの方がいましたら教えてもらえるとうれしいです。
Rclone
sshfsの代わりにRcloneというオープンソースのツールを使ってみましょう。
Rclone syncs your files to cloud storage
https://rclone.org/
Rcloneはローカルとクラウドストレージと同期することを目的に開発されたツールです。非常に多くのプロバイダーがサポートされていて、ssh以外にもAmazon S3, Google Cloud Storage, Microsoft One Driveなど数多くのクラウドストレージをサポートしています。OpenStack Swiftもサポートしているので、ConoHaのオブジェクトストレージでも使うことができます。サポートしているプロバイダーのリストはこちらです。
「ファイルの同期」を主目的としてはいるものの他の機能も多く実装されていて、よく使うファイル作成、コピー、削除のようなものから、ディレクトリのマウント、リモートファイルの閲覧など、おおよそ必要なファイルオペレーションは一通りサポートされています。ディレクトリのマウントはsshfsを代替できるもので。
インストール
RcloneはWindows, macOS, Linuxなどのプラットフォームで動作します。以下のURLから自分のプラットフォームにあった方法でインストールを進めていきます。
https://rclone.org/install/
macOSの場合はHomebrewを使うのでは無く、自分でバイナリファイルをダウンロードしてインストールするのが良いでしょう。macFUSEが不要になります。
設定
Rcloneではリモートのストレージに接続する前に、あらかじめ設定を行っておく必要があります。リモートストレージ毎に「プロバイダー」と呼ばれるコネクタが用意されていて、それぞれ固有の設定を持っています。SSHなどでリモートのサーバー上のファイルシステムをマウントする場合、「SFTP」というプロバイダーを使います。
https://rclone.org/sftp/
設定を行っていきますが、Rcloneには対話的なコマンドが用意されています。便利なのでこれを使うのが良いでしょう。ちなみに設定ファイル自体はホームディレクトリの ~/.config/rclone/rclone.conf に保存されます(macOSやLinuxの場合)。
少し長いですが大半の項目は省略可能です。大括弧の部分は私からの補足説明ですので参考にしてみてください。
$ rclone config [←ターミナルからrclone configと入力して開始します]
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n [←nを入力。新規にリモート設定を作成します]
name> conoha-vps [←リモート設定の名前を入力します。よく使うので短い方が良いです。後で変更可能]
Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
1 / 1Fichier
\ (fichier)
2 / Akamai NetStorage
\ (netstorage)
3 / Alias for an existing remote
\ (alias)
4 / Amazon Drive
\ (amazon cloud drive)
(中略…)
46 / seafile Storage> sftp
Storage> sftp [←sftpと入力します]
Option host.
SSH host to connect to.
E.g. "example.com".
Enter a value.
host> conoha.hironobu.org [←接続先のホスト名を入力します]
Option user.
SSH username.
Enter a string value. Press Enter for the default (hiro).
user> [←SSHのユーザー名を入力します。省略すると今現在ログイン中のユーザー名が使われます]
Option port.
SSH port number.
Enter a signed integer. Press Enter for the default (22).
port> [←ポート番号を入力します。省略可能]
Option pass.
SSH password, leave blank to use ssh-agent.
Choose an alternative below. Press Enter for the default (n).
y) Yes, type in my own password
g) Generate random password
n) No, leave this optional password blank (default)
y/g/n> [←パスワードを入力します。公開鍵認証を使う場合はそのままエンター]
Option key_pem.
Raw PEM-encoded private key.
If specified, will override key_file parameter.
Enter a value. Press Enter to leave empty.
key_pem> [←PEM形式の秘密鍵を直接入力できます。省略可能。次でファイル名でも指定できます]
Option key_file.
Path to PEM-encoded private key file.
Leave blank or set key-use-agent to use ssh-agent.
Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.
Enter a value. Press Enter to leave empty.
key_file> ~/.ssh/id_ed25519 [←秘密鍵のファイル名を入力します。私はこちらを使いました]
Option key_file_pass.
The passphrase to decrypt the PEM-encoded private key file.
Only PEM encrypted key files (old OpenSSH format) are supported. Encrypted keys
in the new OpenSSH format can't be used.
Choose an alternative below. Press Enter for the default (n).
y) Yes, type in my own password
g) Generate random password
n) No, leave this optional password blank (default)
y/g/n> [←秘密鍵のパスワードを入力します。省略可能]
Option pubkey_file.
Optional path to public key file.
Set this if you have a signed certificate you want to use for authentication.
Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.
Enter a value. Press Enter to leave empty.
pubkey_file> [←公開鍵ファイルを指定できます。省略可能]
Option key_use_agent.
When set forces the usage of the ssh-agent.
When key-file is also set, the ".pub" file of the specified key-file is read and only the associated key is
requested from the ssh-agent. This allows to avoid `Too many authentication failures for *username*` errors
when the ssh-agent contains many keys.
Enter a boolean value (true or false). Press Enter for the default (false).
key_use_agent> [←ssh-agentを使う場合はtrueにします。省略可能]
Option use_insecure_cipher.
Enable the use of insecure ciphers and key exchange methods.
This enables the use of the following insecure ciphers and key exchange methods:
- aes128-cbc
- aes192-cbc
- aes256-cbc
- 3des-cbc
- diffie-hellman-group-exchange-sha256
- diffie-hellman-group-exchange-sha1
Those algorithms are insecure and may allow plaintext data to be recovered by an attacker.
Choose a number from below, or type in your own boolean value (true or false).
Press Enter for the default (false).
1 / Use default Cipher list.
\ (false)
2 / Enables the use of the aes128-cbc cipher and diffie-hellman-group-exchange-sha256, diffie-hellman-group-exchange-sha1 key exchange.
\ (true)
use_insecure_cipher> false [←falseで良いでしょう。古いサーバーに接続する場合はtrueにする必要があるかもしれません]
Option disable_hashcheck.
Disable the execution of SSH commands to determine if remote file hashing is available.
Leave blank or set to false to enable hashing (recommended), set to true to disable hashing.
Enter a boolean value (true or false). Press Enter for the default (false).
disable_hashcheck> [←SFTPのハッシュチェックを無効にします。省略可能]
Edit advanced config?
y) Yes
n) No (default)
y/n> [←拡張設定を行いたい場合はYesと答えます。省略可能]
--------------------
[conoha-vps]
type = sftp
host = conoha.hironobu.org
key_file = ~/.ssh/id_ed25519
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:
Name Type
==== ====
conoha-vps sftp
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q
以上で設定が終わりました。
rcloneコマンドの基本的な書式は、
rclone [サブコマンド] [パラメーター]
となります。ひとまず先ほど作成したリモート設定が正常に動作するか確認するために lsd サブコマンドを使ってみましょう。lsdはリモートのディレクトリを一覧表示するサブコマンドです。
$ rclone lsd conoha-vps:/home/hiro
-1 2022-04-25 17:57:52 -1 .config
-1 2022-04-28 15:07:55 -1 .docker
-1 2022-05-12 12:04:45 -1 .local
-1 2022-04-11 16:07:46 -1 .npm
-1 2022-06-03 12:05:00 -1 .ssh
-1 2022-04-25 12:36:33 -1 .vim
-1 2022-05-31 04:30:57 -1 .vscode-server
-1 2022-01-05 17:26:05 -1 dotfiles
-1 2022-01-05 17:26:21 -1 local
conoha-vps:/home/hiro の部分は先ほど作成したリモート設定の名前と表示したいファイルパスをコロンで繋いだものです。sshfsでも使われた形式ですね。/home/hiroの部分は省略可能で、その場合はホームディレクトリを指定したことになります。
サブコマンドにはもちろんlsdではないlsもありますが、一般的なlsとは違ってデフォルトでディレクトリを再帰して表示しようとします。ホームディレクトリを表示すると膨大な数の一覧が返ってくることがあるので、ここではあえてlsdを使いました。
ここで一つ注意することがあります。ホームディレクトリを表すのにチルダ ~ がよく使われますが、rcloneではシェル展開されないので使えません。
サブコマンドは他にもmkdir, copy, rmdir, deleteなど一般的なファイルオペレーションで使われそうなものも揃っていて直感的に使えます。これだけで一通りリモートファイルの操作ができるでしょう。syncというサブコマンドもあって、これはrsyncのように使うことができます。
マウントする
sshfsのようにリモートファイルシステムをローカルにマウントする場合は、そのままの名前でmountと言うサブコマンドを使います。簡単な使い方は以下のようになります。sshfsと似ていますね。
$ rclone mount [リモート名:リモートパス] [マウントポイント]
「マウントポイント」とはローカルのパスです。
このコマンドを実行するとフォアグランドで実行されますが、--daemonオプションを付けてバックグラウンドで実行することもできます。
マウントを解除する場合はumountでローカルのマウント先を指定します。バックグラウンドで実行した場合でもこの方法でアンマウントできます。
umount [マウントポイント]
これもsshfsと同じです。
まとめ
Rcloneをsshfsの代替として使ってみました。事前に設定を行う必要がある部分がsshfsには無かった点です、ただそれ以外は使い勝手も似ているので、代替ツールとして使っていけるのではないでしょうか。
Rcloneは非常に多機能でAmazon S3やGoogle Cloud Storageのようなクラウドストレージにも対応しています。最初の方で少し触れましたが、ConoHaのオブジェクトストレージもローカルにマウントできますので、次回はそのあたりの設定を解説しようかと思います。
それではまた次回お目にかかりましょう。
[PR]
私が働いているGMOインターネット株式会社ではエンジニアを含め採用を強化しています。
募集職種 | GMOインターネット株式会社採用
「いきなり応募するもなぁ」と言う方は、Twitter DMで私に直接ご相談いただいても構いません。社内の雰囲気、開発現場の雰囲気、人間関係、待遇など、社内の人物からリアルな情報を知りたいという方はお気軽にどうぞ。