sshfs挂载,sudo获得许可被拒绝


53

我正在sshfs通过ssh将带有一些python项目的文件夹安装到我的~/目录中。

$ mkdir -p ~/mount/my-projects
$ sshfs user@example.com:/home/user/my-projects ~/mount/my-projects

我可以按预期执行大多数命令:

$ ls ~/mount/my-projects
some-python-project

但是,如果我尝试使用进行任何操作sudo,它都会失败,并且权限被拒绝:

$ sudo ls ~/mount/my-projects
ls: cannot access /home/user/mount/my-projects: Permission denied

我实际上要完成的工作是在本地计算机上测试python软件包安装脚本:

$ cd ~/mount/my-projects/some-python-project
$ sudo python setup.py install

Answers:


93

我相信您需要使用allow_othersshfs选项。为此,您应该使用sudo来调用它,如下所示:

sudo sshfs -o allow_other user@myserver:/home/user/myprojects ~/mount/myprojects

如果没有此选项,则只有运行sshfs的用户才能访问安装。这是保险丝的限制。键入可获得更多信息man fuse

您还应该注意(至少在Ubuntu上)您必须是'fuse'组的成员,否则上面的命令将抱怨/etc/fuse.conf在没有'sudo'运行时无法访问。


2
好的第一答案!
slm

13
另请参阅仅allow_root允许的选项root。但是请注意,除非您在中添加user_allow_other一行,否则默认情况下这些选项仅限于root用户/etc/fuse.conf
斯特凡Chazelas

7

sshfs是一个userland进程,因此无需使用运行它sudo

如果您确实以sudo身份运行它并使用SSH密钥身份验证,则将在用户的/root/.ssh不是用户的下方搜索密钥/home/myuser/.ssh

同样适用于能够使用的~/.ssh/config文件sshfs

如果您~/.ssh/config喜欢:

Host remotehost
    HostName 111.22.33.44
    User root
    Port 1234
    IdentityFile ~/.ssh/id_rsa

那么您可以通过以下方式将远程主机安装为普通用户:

sshfs remotehost: local_dir

要在root用户下运行,您可以附加-o IdentityFile /home/myuser/.ssh/id_rsa到'raw' sshfs命令,或者/root/.ssh/config使用用户的SSH密钥的完整路径进行创建:

Host remotehost
    HostName 111.22.33.44
    User root
    Port 1234
    IdentityFile /home/myuser/.ssh/id_rsa

现在sshfs remotehost: local_dir也可以在根目录下工作。

随着你.ssh/config的地方,你可以复制主机之间的整个文件夹用(远端到本地)scp -r remotehost:remotedir localdir或(本地到远程)scp -r localdir remotehost:remotedir,所以对于一个一次性的操作,你甚至不需要sshfs

如果您使用那样的相对远程路径,remotehost:remotedir那么remotedir它将相对于用户的主文件夹,即remotehost:remotedir相当于remotehost:/home/myuser/remotedir


1

为我解决了问题的是allow_other在命令中添加选项,如下所示:

$ sshfs -o allow_other user@example.com:/home/user/my-projects ~/mount/my-projects

那么您可能会得到错误:

选项allow_other仅当在/etc/fuse.conf中设置了'user_allow_other'才能使用您喜欢的文本编辑器将其解析为/etc/fuse.conf并取消注释时删除(删除后面的#) user_allow_other

如果这样可以解决问题,那么您可以sshfs成功运行,太好了!如果不是,您应该尝试通过以下命令将用户添加到保险丝组:

$ usermod -a -G mark fuse

如果错误提示说保险丝组不存在,则可以通过以下方式轻松创建该组:

$ sudo groupadd mynewgroup
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.