sshfs mount, sudo mendapat izin ditolak

53

Saya menggunakan sshfsuntuk memasang folder dengan beberapa proyek python melalui ssh ke ~/direktori saya .

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

Saya dapat melakukan sebagian besar perintah seperti yang diharapkan:

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

Tetapi saya jika saya mencoba melakukan sesuatu dengan sudoitu, gagal dengan izin ditolak:

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

Apa yang sebenarnya saya coba capai adalah untuk menguji skrip instalasi paket python pada mesin lokal saya:

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

Jawaban:

93

Saya percaya Anda perlu menggunakan allow_otheropsi untuk sshfs. Untuk melakukan ini, Anda harus memanggilnya dengan sudo, sebagai berikut: -

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

Tanpa opsi ini, hanya pengguna yang menjalankan sshfs yang dapat mengakses mount. Ini adalah batasan sekering. Info lebih lanjut tersedia dengan mengetik man fuse.

Anda juga harus mencatat bahwa (setidaknya di Ubuntu) Anda harus menjadi anggota kelompok 'sekering', jika tidak, perintah di atas akan mengeluh tentang tidak dapat mengakses /etc/fuse.confketika dijalankan tanpa 'sudo'.

garethTheRed
sumber
2
Jawaban pertama yang bagus!
slm
13
Lihat juga allow_rootopsi untuk memperbolehkan rootsaja. Harap dicatat bahwa opsi-opsi tersebut dibatasi untuk melakukan root secara default kecuali jika Anda menambahkan user_allow_otherbaris ke /etc/fuse.conf.
Stéphane Chazelas
7

sshfsadalah proses userland, jadi tidak perlu untuk menjalankannya sudo.

Jika Anda menjalankannya sebagai sudo dan menggunakan otentikasi kunci SSH, maka kunci tersebut akan dicari di bawah /root/.sshdan bukan di bawah pengguna Anda /home/myuser/.ssh.

Hal yang sama berlaku untuk ~/.ssh/configfile yang sshfsdapat digunakan.

Jika Anda memiliki ~/.ssh/configsejenis:

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

maka Anda bisa memasang host jarak jauh Anda sebagai pengguna normal dengan:

sshfs remotehost: local_dir

Untuk berjalan di bawah root, Anda dapat menambahkan -o IdentityFile /home/myuser/.ssh/id_rsaperintah 'raw' sshfs, atau membuat /root/.ssh/configdengan path lengkap ke kunci SSH pengguna Anda:

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

Sekarang sshfs remotehost: local_dirjuga akan bekerja di bawah root.

Dengan .ssh/configtempat Anda, Anda dapat menyalin seluruh folder antara host dengan (jarak jauh ke lokal) scp -r remotehost:remotedir localdiratau (lokal ke jarak jauh) scp -r localdir remotehost:remotedir, jadi untuk operasi satu kali saja, Anda bahkan mungkin tidak perlu sshfs.

Jika Anda menggunakan jalur jarak jauh relatif seperti di remotehost:remotedirmaka remotedirakan relatif ke folder rumah pengguna, yaitu remotehost:remotedirsetara denganremotehost:/home/myuser/remotedir

ccpizza
sumber
1

Apa yang memecahkan masalah bagi saya adalah menambahkan allow_otheropsi ke perintah seperti ini:

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

maka Anda mungkin mendapatkan kesalahan:

opsi allow_other hanya diizinkan jika 'user_allow_other' diset di /etc/fuse.conf untuk menyelesaikannya menuju /etc/fuse.conf dengan editor teks favorit Anda dan batalkan komentar (hapus tanda # di belakang) user_allow_other

Jika itu menyelesaikan masalah dan Anda bisa berjalan dengan sshfssukses, hebat! Jika tidak, Anda harus mencoba menambahkan pengguna Anda ke grup sekering dengan perintah ini:

$ usermod -a -G mark fuse

dan jika itu menghasilkan kesalahan yang mengatakan grup sekering tidak ada Anda dapat dengan mudah membuat grup itu dengan:

$ sudo groupadd mynewgroup
Khashayar Motarjemi
sumber