Я хочу использовать sshfs с моего компьютера с Linux (Ubuntu 18.04.2 LTS) на моем MacBook. Я мог бы сделать это в командной строке с
sshfs jczhang@10.0.2.2:/Users/jczhang/mysharedfolder /home/jczhang/mysharedfolder
Он работал отлично. Поскольку я хотел автоматически смонтировать общую папку во время загрузки, я поместил ее в /etc/fstab.
. jczhang@10.0.2.2:/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. После перезагрузки я обнаружил, что каталог был смонтирован, но я не смог получить к нему доступ.
ls -l
d????????? ? ? ? ? ? mysharedfolder/
cd mysharedfolder
-bash: cd: mysharedfolder: Input/output error
mount status had
jczhang@10.0.2.2:/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. Ничего не изменилось.
1112 Кто-нибудь знает решение? Спасибо.
Эта проблема сводила меня с ума. Поскольку эта общая папка предназначена для моего личного использования, а sshfs работает в командной строке, я нахожу обходной путь. В .bashrc я поместил
if ! [ -d /home/jczhang/mysharedfolder/flagfile ]; then
sshfs jczhang@10.0.2.2:/Users/jczhang/mysharedfolder /home/jczhang/mysharedfolder -o idmap=user,uid=1000,gid=1000
fi
flagfile - это файл, который сообщает о том, что папка уже смонтирована. При каждом (первом) входе в Linux папка автоматически монтируется для меня.
Это прекрасно работает!
У меня точная настройка:
Моя ОС от 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 entry: (вы можете удалить запись порта)
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
У меня была такая же проблема. Проблема оказалась в том, что удаленный компьютер не присутствовал в корневом файле known_hosts
локальной машины. Простое выполнение:
sudo mount /path/to/mount
заставит sshfs
запросить добавление удаленного в корневой файл known_hosts
— поэтому, если вы выберете «да» в подсказке, это должно быть сделано.
Обратите внимание на sudo
. mount
без sudo
успешно смонтирует его, но добавит удаленный сервер в файл known_hosts
пользователя вместо файла root. Записи fstab
монтируются пользователем root, поэтому, если вы не добавили удаленный компьютер в known_hosts
root, он не найдет его, и монтирование будет неполным, что приведет к ошибка ввода/вывода.