sshfs mount, sudo bekommt die Erlaubnis verweigert

53

Ich verwende sshfs, um einen Ordner mit einigen Python-Projekten über ssh in mein ~/Verzeichnis zu laden .

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

Ich kann die meisten Befehle ausführen, wie zu erwarten war:

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

Aber wenn ich versuche, irgendetwas damit zu tun sudo, schlägt dies mit verweigerter Erlaubnis fehl:

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

Eigentlich versuche ich, ein Python-Paket-Installationsskript auf meinem lokalen Computer zu testen:

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

Antworten:

93

Ich glaube, Sie müssen die allow_otherOption zu sshfs verwenden. Um dies zu tun, sollten Sie es mit sudo wie folgt aufrufen:

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

Ohne diese Option kann nur der Benutzer, der sshfs ausgeführt hat, auf den Mount zugreifen. Dies ist eine Sicherungseinschränkung. Weitere Informationen erhalten Sie durch Eingabe man fuse.

Sie sollten auch beachten, dass Sie (zumindest unter Ubuntu) Mitglied der Gruppe 'fuse' sein müssen, da sich der obige Befehl sonst beschwert, /etc/fuse.confwenn er ohne 'sudo' ausgeführt wird, kein Zugriff möglich ist .

garethTheRed
quelle
2
Gute erste Antwort!
slm
13
Siehe auch die allow_rootOption, rootnur zuzulassen . Beachten Sie jedoch, dass diese Optionen standardmäßig auf root beschränkt sind, es sei denn, Sie fügen eine user_allow_otherZeile hinzu /etc/fuse.conf.
Stéphane Chazelas
7

sshfsDa es sich um einen Userland-Prozess handelt, muss er nicht ausgeführt werden sudo.

Wenn Sie es als sudo ausführen und die SSH-Schlüsselauthentifizierung verwenden, wird der Schlüssel unter /root/.sshund nicht unter dem Ihres Benutzers gesucht /home/myuser/.ssh.

Gleiches gilt für ~/.ssh/configDateien, die sshfsverwendet werden können.

Wenn Sie eine ~/.ssh/configmögen:

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

Dann können Sie Ihren Remote-Host als normalen Benutzer einbinden mit:

sshfs remotehost: local_dir

Um unter root zu laufen, können Sie -o IdentityFile /home/myuser/.ssh/id_rsaan den 'raw'- sshfsBefehl anhängen oder /root/.ssh/configmit dem vollständigen Pfad zum SSH-Schlüssel Ihres Benutzers erstellen :

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

Funktioniert jetzt sshfs remotehost: local_dirauch unter root.

Wenn Sie .ssh/configvor Ort sind, können Sie ganze Ordner zwischen den Hosts mit (remote zu lokal) scp -r remotehost:remotedir localdiroder (lokal zu remote) kopieren scp -r localdir remotehost:remotedir, sodass Sie für einen einzelnen Vorgang möglicherweise nicht einmal brauchen sshfs.

Wenn Sie einen relativen Remote - Pfad verwenden , wie in remotehost:remotedirdann remotedirwird die Home - Ordner relativ, dh remotehost:remotedirentsprichtremotehost:/home/myuser/remotedir

ccpizza
quelle
1

Was das Problem für mich löste, war das Hinzufügen der folgenden allow_otherOption zum Befehl:

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

dann könnten Sie den Fehler bekommen:

Option allow_other ist nur zulässig, wenn 'user_allow_other' in /etc/fuse.conf festgelegt ist, um diesen Kopf in /etc/fuse.conf mit Ihrem bevorzugten Texteditor zu lösen und das Kommentar zu entfernen (löschen Sie das # dahinter) user_allow_other

Wenn das Problem dadurch behoben und Sie sshfserfolgreich ausgeführt werden könnten , großartig! Wenn nicht, sollten Sie versuchen, Ihren Benutzer mit diesem Befehl zur Sicherungsgruppe hinzuzufügen:

$ usermod -a -G mark fuse

und wenn es zu einem Fehler kommt, der besagt, dass die Sicherungsgruppe nicht existiert, können Sie diese Gruppe einfach wie folgt erstellen:

$ sudo groupadd mynewgroup
Khashayar Motarjemi
quelle