我想从我的 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
.也会成功挂载它,但会将远程添加到用户的文件而不是根的文件中。条目由根挂载,因此如果您没有将远程添加到根的,它将找不到它,并且挂载将不完整,并导致输入/输出错误。mount
sudo
known_hosts
fstab
known_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