带有 fstab 的 sshfs:错误的 uid、gid 和输入/输出错误

带有 fstab 的 sshfs:错误的 uid、gid 和输入/输出错误

我想从我的 Linux 机器(Ubuntu 18.04.2 LTS)通过 sshfs 连接到我的 MacBook。我可以在命令行中使用以下命令执行此操作

sshfs [email protected]:/Users/jczhang/mysharedfolder /home/jczhang/mysharedfolder

它运行得很好。因为我想在启动时自动挂载共享文件夹,所以我把它放在 /etc/fstab 中。

[email protected]:/Users/jczhang/mysharedfolder /home/jczhang/mysharedfolder fuse.sshfs delay_connect,_netdev,user,uid=1000,gid=1000,IdentityFile=/home/jczhang/.ssh/id_rsa,allow_other 0 0

这里的1000是我在Linux中的uid和gid。重启后,我发现目录已经挂载,但我无法访问该目录。

ls -l
d?????????  ? ?       ?              ?            ? mysharedfolder/

cd mysharedfolder
-bash: cd: mysharedfolder: Input/output error

mount status had
[email protected]:/Users/jczhang/mysharedfolder on /home/jczhang/mysharedfolder type fuse.sshfs (rw,nosuid,nodev,noexec,relatime,user_id=0,group_id=0,allow_other,_netdev,user)

我不知道为什么 sshfs 一直使用 user_id=0,group_id=0。我尝试了 uid=1000、gid=1000 和 idmap=user 的不同组合。都没有用。我卸载了共享文件夹并执行了“mount -a”。问题仍然没有解决。

我使用了默认的 SSHFS 版本 2.10。后来我将其升级到版本 3.5.2。没有任何变化。

有人知道解决办法吗?谢谢。

更新:

这个问题让我抓狂。由于这个共享文件夹是供我个人使用的,并且 sshfs 在命令行下工作,所以我找到了一个解决方法。在 .bashrc 中,我放置了 一个 flagfile 文件来告诉该文件夹是否已挂载。每次(第一次)我登录 Linux 时,该文件夹都会自动为我挂载。 if ! [ -d /home/jczhang/mysharedfolder/flagfile ]; then sshfs [email protected]:/Users/jczhang/mysharedfolder /home/jczhang/mysharedfolder -o idmap=user,uid=1000,gid=1000 fi

效果非常好!

答案1

我遇到了同样的问题。问题原来是远程文件不在本地机器根目录中known_hosts。只需执行以下操作:

sudo mount /path/to/mount

将导致sshfs提示将远程添加到 root 的known_hosts文件中 - 所以如果您在提示时选择“是”,那么就应该完成。

请注意,不带sudo.也会成功挂载它,但会将远程添加到用户的文件而不是根的文件中。条目由根挂载,因此如果您没有将远程添加到根的,它将找不到它,并且挂载将不完整,并导致输入/输出错误。mountsudoknown_hostsfstabknown_hosts

答案2

我已经完成了以下设置:

我的操作系统是18.04.2:

] lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic

我的 SSHFS 版本:

] sshfs -V
SSHFS version 2.8
FUSE library version: 2.9.7
fusermount version: 2.9.7
using FUSE kernel interface version 7.19

创建基础:

] sudo mkdir /path/to/mount
] sudo chown $USER: /path/to/mount
] sudo nano /etc/fstab
] ssh REMOTEUSER@HOSTNAME touch /path/to/share/testfile

/etc/fstab 条目:(您可以删除端口条目)

REMOTEUSER@HOSTNAME:/path/to/share /path/to/mount fuse.sshfs port=PORT,_netdev,follow_symlinks,identityfile=/home/LOCALUSER/.ssh/RSAKEY,allow_other,uid=1000,gid=1000 0 0

测试支架:

] sudo mount -a
] mount | grep HOSTNAME
REMOTEUSER@HOSTNAME:/path/to/share on /path/to/mount type fuse.sshfs (rw,relatime,user_id=0,group_id=0,allow_other,_netdev)
] ls -l /path/to/
...
drwxr-xr-x 1 LOCALUSER LOCALGROUP 4096 Jun 28 09:20 mount/
...
] ls -l /path/to/mount/testfile
-rw-rw-r-- 1 samh samh 0 Jun 28 10:45 /path/to/mount/testfile

相关内容