シンボリックリンクで作業できるように、SSHFS経由でリモートSFTPパスをマウントする方法を誰かが知っていますか?これを行うと、作成したすべてのシンボリックリンクが間違ったファイルをポイントします(リンクしたものではありません)。関心のあるすべてのシンボリックリンクは相対(絶対ではない)であるため、リモートマシンで行うのとまったく同じように表示されます。理想的です。
デフォルトのマウントオプションでsshfsを使用すると、現在のディレクトリにある別のファイルへのシンボリックリンクを作成できません。
$ cd /mnt/path/to/sshfs/mount
$ ln -s ./test ./test2
$ ls test2
lrwxrwxrwx 1 root webusers 11 Jul 3 09:11 test2 -> /test
リンクターゲットが現在のディレクトリ(./test
)にあるため、これは明らかに正しくありませんが、sshfsが/test
へのリンクを作成していることがわかります。これは正しくありません。リンクターゲットは/mnt/path/to/sshfs/mount/test
ではなく/test
です。
Sshfsファイルシステムをマウントするときにtransform_symlinks
オプションを追加すると、代わりに同じコマンドで相対リンクが取得されますが、それでも間違った場所を指しています。
$ cd /mnt/path/to/sshfs/mount
$ ln -s ./test ./test2
$ ls test2
lrwxrwxrwx 1 root webusers 11 Jul 3 09:13 test2 -> ../../../test
ここでは、現在のディレクトリの./test
にリンクしようとしましたが、代わりに3レベル上の../../../test
へのリンクを取得しました。
ただし、sshfsでマウントする代わりに、コマンドラインSFTPクライアントsftp
で接続しても機能します。
sftp> open ...
sftp> symlink test test2
...
$ cd /mnt/path/to/sshfs/mount
$ ls test2
lrwxrwxrwx 1 root webusers 11 Jul 3 09:13 test2 -> test
したがって、これはリモートSFTPサーバーが正常に機能していることを示しています(専用のSFTPクライアントでシンボリックリンクを作成できるため)が、何らかの理由でsshfsを介して機能するシンボリックリンクを作成できません。
奇妙なことに、sshfsを使用してシェルアクセスを提供するSSHサーバーにパスをマウントすると(SFTPのみのサーバーではなく)、シンボリックリンクは正常に機能し、正しく作成できます。 SFTPのみのサーバーに接続されている場合にのみ問題があるようです。
何が悪いのですか? SFTPサーバーに接続してシンボリックリンクを機能させるときに、sshfsに渡す必要がある特別なオプションはありますか?
リモートアブソリュート(/
で始まる)シンボリックリンクをsshfs
マウントポイントに関連するように変換するには、follow_symlinks
オプションを使用します。
sshfs -o follow_symlinks ...
transform_symlinks
オプションは何もしません。 この問題 を参照してください。
先ほど説明した動作を確認しましたが、これをテストすると、sshfsがマウントされたディレクトリにシンボリックリンクを作成できます。
$ touch T
$ ln -s T L
$ ls -l T L
lrwxrwxrwx 1 user user 1 Apr 9 16:10 L -> T
-rw-rw-r-- 1 user user 0 Apr 9 16:10 T
$ echo hello >> L
$ cat T
hello
$ pwd
/home/user/Oak/tmp
$ mount | grep Oak
user@Oak: on /home/user/Oak type Fuse.sshfs (rw,nosuid,nodev,user=user)
約4か月前にリモートでsshdをアップグレードしました。古いバージョンは数年前のものでした。たぶん、アップグレードで問題が解決したのかもしれません。これは、私が現在使用しているものについていくつかの手掛かりを与えるかもしれません:
$ ssh Oak 'ident $(which sshd)' | grep ssh
/usr/sbin/sshd:
$NetBSD: sshd.c,v 1.13.4.1 2015/04/30 06:07:31 riz Exp $
$NetBSD: sshpty.c,v 1.2.26.1 2015/04/30 06:07:31 riz Exp $
$NetBSD: sshlogin.c,v 1.4.22.1 2015/04/30 06:07:31 riz Exp $
Ubuntuが自動的に行うことを除いて、私はsshfsを変更するために何もしていません。
HTH。