我不是在询问挂载 SSHFS 挂载点,这是我发现的所有类似问题的主题。
我的挂载点 ( /path/to/sshfs/mount/
) 已正确挂载,我可以作为我的用户列出、读取、写入所有预期的文件。
我确实有权将脚本复制到本地目录。但是,因为该脚本需要几个包含库文件和资源的子目录,所以我更喜欢在它所在的位置执行该脚本,而不是在本地复制它。此外,无需将其复制到本地机器即可完成其预期工作。
不幸的是,对于 SSHFS 挂载,该脚本需要 root 权限才能进行许多操作,因为它必须将一些文件安装到系统目录并更新系统中存在的不同用户的文件。
这是我的错误:
$ cd /path/to/sshfs/mount/
$ sudo ./myscript.sh
sudo: unable to execute ./myscript.sh: Permission denied
以下是我执行的检查:
$ ls -la
-rwxr-x--- 1 myuser team 8173 Dec 15 06:33 myscript.sh
$ sudo -i
[sudo] password for myuser:
#
$ cat /etc/fstab
myuser@myserver:/path/to/sshfs/mount/ /path/to/sshfs/mount/ fuse.sshfs x-systemd.automount,_netdev,user,follow_symlinks,identityfile=/path/to/.ssh/key_file,allow_other,default_permissions 0 2
这表明所需的 fuse.conf 选项已启用:
$ cat /etc/fuse.conf
user_allow_other
什么 SSHFS 配置将允许我运行:
$ sudo /path/to/sshfs/mount/myscript.sh
mount 命令支持
exec
和noexec
挂载选项:exec:允许执行二进制文件。
noexec:不允许在已挂载的文件系统上直接执行任何二进制文件。
即使您没有指定任何一个挂载选项,
noexec
如果您指定了挂载选项,也将应用users
挂载选项。users 选项暗示选项 noexec、nosuid 和 nodev(除非被后续选项覆盖,如选项行 users,exec,dev,suid)。
此命令显示
noexec
正在隐式应用:因此,这个问题的解决方案就是添加
exec
挂载选项。我怀疑您对权限有些困惑。
您的 sshfs 访问权限只能以对 ssh 会话进行身份验证的用户身份访问文件。虽然正如 MountainX 所说,文件系统可能以 noexec 方式挂载,但这很容易解决:
但是,请注意,虽然脚本将在具有 root 权限的本地计算机上以 root 身份执行,但它仅具有远程文件系统上 ssh 身份验证用户的权限。进一步的 shell 脚本通常只是将其他命令串在一起——其中一些可能是正确映射到 sshfs 挂载点的相对路径。其他人可能会指向别处;这看起来像是一场等待发生的事故。