使用sshfs挂载远程目录后无法写入文件,报错E212求助
首先得帮你理清核心矛盾:你远程的/home/user01/somedir目录权限显示是-rw-r--r--(这里大概率是笔误,目录权限的第一位应该是d,比如drw-r--r--),不管怎样,目录要支持写入操作必须具备执行权限(x)——没有x权限的话,哪怕是目录所有者也没法进入目录创建或修改文件。不过你明确说不想修改远程权限,那咱们换个思路解决:
方案一:通过远程sudo提升挂载权限
如果远程机器允许user01使用sudo,你可以在挂载时指定用root身份运行sftp服务,这样就能绕过远程目录的权限限制。
先在远程机器上给
user01配置免密sudo权限(避免挂载时重复输入密码):
用visudo编辑sudoers文件(这比直接编辑更安全),添加一行:user01 ALL=(ALL) NOPASSWD: /usr/lib/sftp-server注意
/usr/lib/sftp-server是sftp服务的默认路径,不同系统可能有差异,比如部分系统是/usr/lib/openssh/sftp-server,可以在远程用which sftp-server确认具体路径。修改你的sshfs挂载命令:
sshfs user01:/home/user01/somedir /home/user02/mount -o allow_other -o rw -o sftp_server="sudo /usr/lib/sftp-server"这样挂载后,你在本地对挂载点的操作会以远程root身份执行,自然就能顺利写入文件了。
方案二:检查本地挂载点权限
先确保本地挂载目录/home/user02/mount的权限允许你当前操作的用户写入,比如执行:
chmod 755 /home/user02/mount
如果是多个用户需要访问,也可以调整为chmod 775(根据你的实际需求来)。这一步是基础排查,避免本地权限拖后腿。
方案三:强制UID/GID映射
如果本地user02的UID/GID和远程user01不一致,可能会导致权限映射异常。挂载时可以强制指定映射的UID和GID:
sshfs user01:/home/user01/somedir /home/user02/mount -o allow_other -o rw -o uid=$(id -u user02) -o gid=$(id -g user02)
这个方案不一定能解决远程目录本身的权限问题,但可以排除身份映射导致的写入失败。
内容的提问来源于stack exchange,提问作者BioRod

