sshfs mount, sudo obtient l'autorisation refusée

53

J'utilise sshfspour monter un dossier avec des projets Python sur SSH dans 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 je tente de faire quoi que ce soit avec sudo, cela échoue avec une permission refusée:

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

Ce que j'essaie en réalité d'accomplir est de tester un script d'installation de paquet python sur ma machine locale:

$ cd ~/mount/my-projects/some-python-project
$ sudo python setup.py install
utilisateur369450
la source

Réponses:

93

Je crois que vous devez utiliser l' allow_otheroption de 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. Ceci est une restriction de fusible. Plus d'informations sont disponibles en tapant man fuse.

Vous devez également noter que (sur Ubuntu du moins), vous devez être membre du groupe 'fuse', sinon la commande ci-dessus se plaindre de l'impossibilité d'accéder /etc/fuse.confà cette fonction lorsqu'elle est exécutée sans 'sudo'.

garethTheRed
la source
2
Bonne première réponse!
slm
13
Voir aussi l' allow_rootoption pour autoriser rootseulement. Veuillez noter toutefois que ces options sont limitées à root par défaut, sauf si vous ajoutez une user_allow_otherligne à /etc/fuse.conf.
Stéphane Chazelas
7

sshfsest un processus utilisateur, il n’est donc pas nécessaire de le lancer sudo.

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

La même chose s'applique au ~/.ssh/configfichier qui sshfsest capable d'utiliser.

Si vous avez un ~/.ssh/configcomme:

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 sshfscommande 'raw' ou créer /root/.ssh/configavec 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, travaillera également sous la racine.

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

Si vous utilisez un chemin d' accès distant par rapport comme remotehost:remotediralors remotedirsera par rapport au dossier de l'utilisateur, ce remotehost:remotedirqui équivaut àremotehost:/home/myuser/remotedir

ccpizza
la source
1

Ce qui a résolu le problème pour moi, c’est d’ajouter l’ allow_otheroption à la commande comme ceci:

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

alors vous pourriez avoir 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 ce problème dans /etc/fuse.conf avec votre éditeur de texte préféré et en supprimant le commentaire (supprimez le # derrière) user_allow_other

Si cela résout le problème et que vous pouvez exécuter sshfsavec succès, c'est parfait! Sinon, vous devriez essayer d'ajouter votre utilisateur au groupe de fusibles à l'aide de cette commande:

$ usermod -a -G mark fuse

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

$ sudo groupadd mynewgroup
Khashayar Motarjemi
la source