Rclone を使って多段 SSH で別 PC のディレクトリをマウントする
こんにちは。今日は Rclone を使ったファイル同期について書いていきます。
前提
- 研究室の PC (Ubuntu) と自宅の PC (Mac) でファイルを同期したい
- 同期するのは論文の PDF ファイルと bib ファイルで、 Jabref を両方の PC でシームレスに扱うことが目的
- Google Drive などのクラウドストレージを双方の PC でマウントする方法が簡便だが、研究室の Ubuntu では Google Drive がうまくマウントできなかった
- 研究室の PC と自宅 PC は SSH での接続が可能
- 研究室には SSH のための踏み台サーバーがあり、 ProxyCommand を使って研究室の PC までアクセスする。
~/.ssh/config
の設定は以下の通り(雰囲気なので詳細は他の記事等をあたってください)。
Host jump-server
HostName xxx.xxx.xxx.xxx
User your-username
IdentityFile ~/.ssh/id_rsa
Host lab-pc
HostName 192.168.1.100
User lab-username
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh -W %h:%p jump-server
- SSH のセットアップはできているので、これを使って研究室 PC のディレクトリをマウントすればいいのではないかと考えた
TL;DR
- Rclone を使って SSH 経由のマウントが可能
- ただし多段 SSH の場合には、 Rclone 内部の SSH バイナリでは対応不可
- Rclone のオプションとして外部の SSH バイナリを指定することで、多段 SSH でもマウントが可能
Rclone とは
Rclone はクラウドストレージのファイルを扱うためのコマンドラインアプリケーションです。 S3 や Google Drive など、様々なクラウドストレージのファイルを扱うことができます。
Rclone は SFTP(SSH File Transfer Protocol) にも対応しており、今回はこれを利用します。
Rclone + SFTP を用いたマウント
Rclone と SFTP を用いたマウントは以下の記事が参考になります。
多段 SSH でなければこの記事の通りにやればできますので、詳細は割愛します。
多段 SSH ではできない理由
多段 SSH の場合には、 Rclone 内部の SSH バイナリが ProxyCommand に対応していないため、接続することができません。この問題は 2023 年 5 月に issue として挙げられていました。
結果として、この問題は別の issue の解決によって解消されました。 Rclone で外部の SSH バイナリを利用できるようにしたのです。
これにより、多段 SSH でマウントできるようになります!
やり方
--sftp-ssh
オプションに実行したい ssh コマンドを与えます。今回は、 lab のホームにある References というディレクトリをクライアント側のホームにある References というディレクトリにマウントすることにしましょう。 ~/.ssh/config
にホスト lab-pc をセットしているので、 --sftp-ssh
オプションに ssh lab-pc
を与えれば OK です。
[lab]
type = sftp
host = 192.168.1.100
key_file = ~/.ssh/id_rsa
rclone lab:/home/username/References ~/References --sftp-ssh "ssh lab-pc"
無事マウントされた!
おわりに
やり方がわからず、結構悩みましたが GitHub を見に行ったら同じことを考えている人がいてよかったです。
僕と同様のニーズがあるかわかりませんが、役に立てば幸いです。
Discussion
これでいいかも、まあいいか。