sshfs mount, sudo получает запрещенное разрешение

53

Я использую sshfsдля монтирования папки с некоторыми проектами Python через SSH в мой ~/каталог.

$ mkdir -p ~/mount/my-projects
$ sshfs user@example.com:/home/user/my-projects ~/mount/my-projects

Я могу выполнить большинство команд, как и следовало ожидать:

$ ls ~/mount/my-projects
some-python-project

Но я, если я попытаюсь что-то сделать sudo, не получится с отказом в разрешении:

$ sudo ls ~/mount/my-projects
ls: cannot access /home/user/mount/my-projects: Permission denied

На самом деле я пытаюсь протестировать скрипт установки пакета python на моей локальной машине:

$ cd ~/mount/my-projects/some-python-project
$ sudo python setup.py install
user369450
источник

Ответы:

93

Я считаю, что вам нужно использовать allow_otherопцию для sshfs. Чтобы сделать это, вы должны вызвать его с помощью sudo, как показано ниже:

sudo sshfs -o allow_other user@myserver:/home/user/myprojects ~/mount/myprojects

Без этой опции только пользователь, запустивший sshfs, может получить доступ к монтированию. Это ограничение предохранителя. Более подробную информацию можно получить, набрав man fuse.

Вы также должны отметить, что (по крайней мере, в Ubuntu) вы должны быть членом группы 'fuse', в противном случае приведенная выше команда будет жаловаться на невозможность доступа /etc/fuse.confпри запуске без 'sudo'.

garethTheRed
источник
2
Хороший первый ответ!
SLM
13
Смотрите также allow_rootвозможность разрешить rootтолько. Тем не менее, обратите внимание, что по умолчанию эти параметры ограничены root, если вы не добавите user_allow_otherстроку в /etc/fuse.conf.
Стефан Шазелас
7

sshfsэто пользовательский процесс, поэтому запускать его не нужно sudo.

Если вы запустите его в качестве ключа аутентификации Суда и использование SSH, то ключ будет искать под /root/.sshи не под вашим пользователя /home/myuser/.ssh.

То же самое относится и к ~/.ssh/configфайлу, который sshfsможно использовать.

Если у вас есть ~/.ssh/configкак:

Host remotehost
    HostName 111.22.33.44
    User root
    Port 1234
    IdentityFile ~/.ssh/id_rsa

тогда вы можете смонтировать ваш удаленный хост как обычный пользователь с помощью:

sshfs remotehost: local_dir

Для запуска под пользователем root вы можете добавить -o IdentityFile /home/myuser/.ssh/id_rsaкоманду «raw» sshfsили создать /root/.ssh/configс полным путем к SSH-ключу вашего пользователя:

Host remotehost
    HostName 111.22.33.44
    User root
    Port 1234
    IdentityFile /home/myuser/.ssh/id_rsa

Теперь sshfs remotehost: local_dirтакже будет работать под root.

Имея .ssh/configна месте, вы можете копировать целые папки между хостами с помощью (от удаленного к локальному) scp -r remotehost:remotedir localdirили (от локального к удаленному) scp -r localdir remotehost:remotedir, поэтому для одной разовой операции вам может даже не понадобиться sshfs.

Если вы используете относительный удаленный путь, как в, remotehost:remotedirто remotedirбудет относительно домашней папки пользователя, то remotehost:remotedirесть эквивалентноremotehost:/home/myuser/remotedir

ccpizza
источник
1

Что решило проблему для меня, так это добавив allow_otherопцию в команду:

$ sshfs -o allow_other user@example.com:/home/user/my-projects ~/mount/my-projects

тогда вы можете получить ошибку:

опция allow_other разрешена только в том случае, если в /etc/fuse.conf задано 'user_allow_other' для решения этой проблемы в /etc/fuse.conf с вашим любимым текстовым редактором и раскомментируйте (удалите знак # позади) user_allow_other

Если это решит проблему, и вы сможете sshfsуспешно бежать , отлично! Если нет, попробуйте добавить своего пользователя в группу предохранителей с помощью этой команды:

$ usermod -a -G mark fuse

и если это приводит к ошибке, говоря, что группа предохранителей не существует, вы можете легко создать эту группу:

$ sudo groupadd mynewgroup
Хашаяр Мотарджеми
источник