sshfs mount, sudo recebe permissão negada

53

Estou usando sshfspara montar uma pasta com alguns projetos python sobre ssh no meu ~/diretório.

$ mkdir -p ~/mount/my-projects
$ sshfs [email protected]:/home/user/my-projects ~/mount/my-projects

Eu posso executar a maioria dos comandos conforme o esperado:

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

Mas se eu tentar fazer alguma coisa sudo, falhará com a permissão negada:

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

Na verdade, o que estou tentando realizar é testar um script de instalação de pacotes python na minha máquina local:

$ cd ~/mount/my-projects/some-python-project
$ sudo python setup.py install
user369450
fonte

Respostas:

93

Eu acredito que você precisa usar a allow_otheropção de sshfs. Para fazer isso, você deve chamá-lo com sudo, da seguinte maneira: -

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

Sem essa opção, apenas o usuário que executou o sshfs pode acessar a montagem. Esta é uma restrição de fusível. Mais informações estão disponíveis, digitando man fuse.

Você também deve observar que (pelo menos no Ubuntu) você precisa ser um membro do grupo 'fuse', caso contrário, o comando acima se queixará de não poder acessar /etc/fuse.confquando executado sem o 'sudo'.

garethTheRed
fonte
2
Boa primeira resposta!
slm
13
Veja também a allow_rootopção de permitir rootapenas. Observe, no entanto, que essas opções estão restritas à raiz por padrão, a menos que você adicione uma user_allow_otherlinha a /etc/fuse.conf.
Stéphane Chazelas
7

sshfsé um processo da terra do usuário, portanto não há necessidade de executá-lo sudo.

Se você executá-lo como sudo e usar a autenticação de chave SSH, a chave será pesquisada sob /root/.sshe não sob o usuário /home/myuser/.ssh.

O mesmo se aplica ao ~/.ssh/configarquivo que sshfsé capaz de usar.

Se você ~/.ssh/configgosta:

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

então você pode montar seu host remoto como um usuário normal com:

sshfs remotehost: local_dir

Para executar no root, você pode anexar -o IdentityFile /home/myuser/.ssh/id_rsaao sshfscomando 'bruto' ou criar /root/.ssh/configcom o caminho completo para a chave SSH do usuário:

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

Agora sshfs remotehost: local_dirtambém funcionará como root.

Com o seu .ssh/configlocal, você pode copiar pastas inteiras entre os hosts com (remoto para local) scp -r remotehost:remotedir localdirou (local para remoto) scp -r localdir remotehost:remotedir; portanto, para uma única operação pontual, talvez você nem precise sshfs.

Se você usar um caminho remoto relativo, como em remotehost:remotedirseguida remotedir, será relativo à pasta inicial do usuário, ou seja, remotehost:remotediré equivalente aremotehost:/home/myuser/remotedir

ccpizza
fonte
1

O que resolveu o problema para mim foi adicionar a allow_otheropção ao comando da seguinte maneira:

$ sshfs -o allow_other [email protected]:/home/user/my-projects ~/mount/my-projects

então você pode receber o erro:

A opção allow_other é permitida apenas se 'user_allow_other' estiver definido em /etc/fuse.conf para resolver esse problema em /etc/fuse.conf com seu editor de texto favorito e remova o comentário (exclua o # behind) user_allow_other

Se isso resolveu o problema e você pode executar com sshfsêxito, ótimo! Caso contrário, você deve tentar adicionar seu usuário ao grupo de fusíveis por este comando:

$ usermod -a -G mark fuse

e se resultar em erro dizendo que o grupo de fusíveis não existe, você poderá criar facilmente esse grupo:

$ sudo groupadd mynewgroup
Khashayar Motarjemi
fonte