使用 go 在 fstab 中挂载条目
Mount entry in fstab with go
有没有一种方法可以使用定义了挂载选项的 fstab 中的条目使用 Go 挂载 ssh 设备。我一直在尝试 syscall.Mount 但没有成功。
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
编辑:
下面是 Marc 的建议,这对我有用:
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 位。
这是因为 mount (8)
(the command), not mount (2)
使用了 /etc/fstab
,所以您的 fstab 条目中的 user
属性什么都不做(条目的其余部分也不做)。
确实,mount (2)
手册页明确指出:
Appropriate privilege (Linux: the CAP_SYS_ADMIN capability) is
required to mount file systems.
如果您不能 运行 作为特权用户或想使用 /etc/fstab
条目,您总是可以 exec 实际的挂载命令。
有没有一种方法可以使用定义了挂载选项的 fstab 中的条目使用 Go 挂载 ssh 设备。我一直在尝试 syscall.Mount 但没有成功。
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
编辑:
下面是 Marc 的建议,这对我有用:
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 位。
这是因为 mount (8)
(the command), not mount (2)
使用了 /etc/fstab
,所以您的 fstab 条目中的 user
属性什么都不做(条目的其余部分也不做)。
确实,mount (2)
手册页明确指出:
Appropriate privilege (Linux: the CAP_SYS_ADMIN capability) is required to mount file systems.
如果您不能 运行 作为特权用户或想使用 /etc/fstab
条目,您总是可以 exec 实际的挂载命令。