代码之家  ›  专栏  ›  技术社区  ›  ripat

使用go在fstab中装载条目

  •  2
  • ripat  · 技术社区  · 7 年前

    是否有方法使用定义了装载选项的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

    编辑:

    下面是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())
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Marc    7 年前

    您需要运行二进制文件 root ,或拥有者 setuid 一点

    这是因为 /etc/fstab 由使用 mount (8) (命令),而不是 mount (2) ,因此 user fstab条目中的属性不起任何作用(条目的其余部分也不起作用)。

    事实上 底座(2) 手册页明确指出:

    适当的特权(Linux:CAP_SYS_ADMIN功能)是 装载文件系统所需。

    如果您不能以特权用户身份运行,或希望使用 /etc/fstab 进入,你可以 exec 实际装载命令。