🗻

Rclone を使って多段 SSH で別 PC のディレクトリをマウントする

2024/04/18に公開1

こんにちは。今日は Rclone を使ったファイル同期について書いていきます。

前提

  • 研究室の PC (Ubuntu) と自宅の PC (Mac) でファイルを同期したい
  • 同期するのは論文の PDF ファイルと bib ファイルで、 Jabref を両方の PC でシームレスに扱うことが目的
  • Google Drive などのクラウドストレージを双方の PC でマウントする方法が簡便だが、研究室の Ubuntu では Google Drive がうまくマウントできなかった
  • 研究室の PC と自宅 PC は SSH での接続が可能
  • 研究室には SSH のための踏み台サーバーがあり、 ProxyCommand を使って研究室の PC までアクセスする。 ~/.ssh/config の設定は以下の通り(雰囲気なので詳細は他の記事等をあたってください)。
~/.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 など、様々なクラウドストレージのファイルを扱うことができます。

https://rclone.org/

Rclone は SFTP(SSH File Transfer Protocol) にも対応しており、今回はこれを利用します。

Rclone + SFTP を用いたマウント

Rclone と SFTP を用いたマウントは以下の記事が参考になります。

https://developers.gmo.jp/18603/

多段 SSH でなければこの記事の通りにやればできますので、詳細は割愛します。

多段 SSH ではできない理由

多段 SSH の場合には、 Rclone 内部の SSH バイナリが ProxyCommand に対応していないため、接続することができません。この問題は 2023 年 5 月に issue として挙げられていました。

https://github.com/rclone/rclone/issues/6987

結果として、この問題は別の issue の解決によって解消されました。 Rclone で外部の SSH バイナリを利用できるようにしたのです。

https://github.com/rclone/rclone/issues/7012

これにより、多段 SSH でマウントできるようになります!

やり方

--sftp-ssh オプションに実行したい ssh コマンドを与えます。今回は、 lab のホームにある References というディレクトリをクライアント側のホームにある References というディレクトリにマウントすることにしましょう。 ~/.ssh/config にホスト lab-pc をセットしているので、 --sftp-ssh オプションに ssh lab-pc を与えれば OK です。

rclone.conf
[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