sshfs가 SFTP 서버의 심볼릭 링크를 끊습니다.

sshfs가 SFTP 서버의 심볼릭 링크를 끊습니다.

심볼릭 링크를 사용할 수 있도록 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여기서는 현재 디렉토리 에 연결하려고 시도했지만 ../../../test3레벨 위로 링크가 표시되었습니다!

sftp그러나 sshfs로 마운트하는 대신 명령줄 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를 사용하여 (SFTP 서버 대신) 쉘 액세스를 제공하는 SSH 서버에 경로를 마운트하면 심볼릭 링크가 제대로 작동합니다. 올바르게 생성할 수 있습니다. 이 문제는 SFTP 전용 서버에 연결할 때만 발생합니다.

내가 뭘 잘못했나요? 심볼릭 링크가 작동하려면 SFTP 서버에 연결할 때 sshfs에 특수 옵션을 전달해야 합니까?

답변1

원격 절대(로 시작 /) 심볼릭 링크를 마운트 지점을 기준으로 상대 링크로 변환하려면 sshfs다음 follow_symlinks옵션을 사용하십시오.

sshfs -o follow_symlinks ...

transform_symlinks옵션은 나에게 아무런 영향을 미치지 않습니다. 참조이 문제.

답변2

이전에 설명하신 동작을 본 적이 있지만 이제 테스트해 보면 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)

업그레이드했어요SSHD약 4개월 전 리모콘에서요. 이전 버전은 몇 년이 지났습니다. 어쩌면 업그레이드하면 이 문제가 해결되었을 수도 있습니다. 이것은 내가 지금 무엇을 사용하고 있는지에 대한 몇 가지 단서를 제공할 수 있습니다.

$ 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.

관련 정보