有没有办法使用 fstab 中定义挂载选项的条目使用 Go 挂载 ssh 设备。我一直在尝试系统调用。挂载不成功。
func main() {
src := "jeanluc@<remote IP>:/home/jeanluc"
target := "/home/jeanluc/my-mnt/ursule_jeanluc"
fs := "fuse.sshfs"
err := syscall.Mount(src, target, fs, 0, "rw")
if err != nil {
log.Fatal(err)
}
}
2018/01/20 11:31:07 operation not permitted exit status 1
使用 fstab 条目的用户装载工作正常。
sshfs#jeanluc@<remote IP>:/home/jeanluc /home/jeanluc/my-mnt/ursule_jeanluc fuse user,noauto,uid=1000,gid=1000,follow_symlinks,defaults 0 0
编辑:
按照马克的建议,以下是对我有用的方法:
cmd := exec.Command("mount /home/jeanluc/my-mnt/ursule_jeanluc")
// capture STDOUT
var out bytes.Buffer
cmd.Stdout = &out
// run cmd
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
// print STDOUT
fmt.Printf("%s", out.String())
你需要以root
运行你的二进制文件,或者由root
拥有并使用setuid位
。这是因为/etc/fstab
由mount (8)
(命令)使用,而不是mount (2)
,因此 fstab 条目中的user
属性不执行任何操作(条目的其余部分也不执行任何操作)。
事实上,mount (2)
手册页明确指出:
适当的特权(Linux:CAP_SYS_ADMIN功能)是 需要挂载文件系统。
如果无法以特权用户身份运行或想要使用/etc/fstab
条目,则始终可以执行实际的 mount 命令。