web-dev-qa-db-fra.com

montage sshfs, Sudo obtient une autorisation refusée

J'utilise sshfs pour monter un dossier avec des projets python sur ssh sur mon ~/ répertoire.

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

Je peux exécuter la plupart des commandes comme on pouvait s'y attendre:

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

Mais si j'essaie de faire quoi que ce soit avec Sudo, cela échoue avec l'autorisation refusée:

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

Ce que j'essaie réellement d'accomplir, c'est de tester un script d'installation du package python sur ma machine locale:

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

Je pense que vous devez utiliser le allow_other option pour sshfs. Pour ce faire, vous devez l'appeler avec Sudo, comme suit: -

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

Sans cette option, seul l'utilisateur qui a exécuté sshfs peut accéder au montage. Il s'agit d'une restriction de fusible. Plus d'informations sont disponibles en tapant man Fuse.

Vous devez également noter que (sur Ubuntu au moins) vous devez être membre du groupe 'Fuse', sinon la commande ci-dessus se plaindra de ne pas pouvoir accéder à /etc/Fuse.conf lorsqu'il a été exécuté sans 'Sudo'.

100
garethTheRed

sshfs est un processus utilisateur, il n'est donc pas nécessaire de l'exécuter avec Sudo.

Si vous l'exécutez en tant que Sudo et utilisez l'authentification par clé SSH, la clé sera recherchée sous /root/.ssh et pas sous votre utilisateur /home/myuser/.ssh.

De même pour ~/.ssh/config fichier que sshfs est capable d'utiliser.

Si tu as un ~/.ssh/config comme:

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

alors vous pouvez monter votre hôte distant en tant qu'utilisateur normal avec:

sshfs remotehost: local_dir

Pour exécuter sous root, vous pouvez ajouter -o IdentityFile /home/myuser/.ssh/id_rsa à la commande 'raw' sshfs, ou pour créer /root/.ssh/config avec le chemin complet de la clé SSH de votre utilisateur:

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

Maintenant sshfs remotehost: local_dir fonctionnera également sous root.

Avec votre .ssh/config en place, vous pouvez copier des dossiers entiers entre les hôtes avec (distant vers local) scp -r remotehost:remotedir localdir ou (local à distant) scp -r localdir remotehost:remotedir, donc pour une seule opération ponctuelle, vous n'aurez peut-être même pas besoin de sshfs.

Si vous utilisez un chemin d'accès distant relatif comme dans remotehost:remotedir puis remotedir sera relatif au dossier personnel de l'utilisateur, c'est-à-dire remotehost:remotedir est équivalent à remotehost:/home/myuser/remotedir

7
ccpizza

Ce qui a résolu le problème pour moi, c'est d'ajouter le allow_other option à la commande comme ceci:

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

alors vous pourriez obtenir l'erreur:

l'option allow_other n'est autorisée que si 'user_allow_other' est défini dans /etc/Fuse.conf pour résoudre cette tête dans /etc/Fuse.conf avec votre éditeur de texte préféré et décommenter (supprimer le # derrière) user_allow_other

Si cela résout le problème et que vous pouvez exécuter sshfs avec succès, tant mieux! Sinon, vous devriez essayer d'ajouter votre utilisateur au groupe Fuse par cette commande:

$ usermod -a -G mark Fuse

et s'il se produit une erreur indiquant que le groupe de fusibles n'existe pas, vous pouvez facilement créer ce groupe en:

$ Sudo groupadd mynewgroup
2
Khashayar Motarjemi