sshfs เมา sudo ได้รับอนุญาตถูกปฏิเสธ


53

ฉันกำลังใช้sshfsเพื่อติดตั้งโฟลเดอร์ที่มีโครงการหลามมากกว่า ssh ไปยัง~/ไดเรกทอรีของฉัน

$ mkdir -p ~/mount/my-projects
$ sshfs user@example.com:/home/user/my-projects ~/mount/my-projects

ฉันสามารถดำเนินการคำสั่งส่วนใหญ่ตามที่คาดไว้:

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

แต่ฉันถ้าฉันพยายามทำอะไรกับsudoมันมันก็ล้มเหลวโดยไม่ได้รับอนุญาต:

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

สิ่งที่ฉันพยายามทำให้สำเร็จคือการทดสอบสคริปต์การติดตั้งแพคเกจหลามบนเครื่องของฉัน:

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

คำตอบ:


93

ฉันเชื่อว่าคุณต้องใช้allow_otherตัวเลือกเพื่อ sshfs ในการทำเช่นนี้คุณควรเรียกมันด้วย sudo ดังนี้: -

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

หากไม่มีตัวเลือกนี้เฉพาะผู้ใช้ที่รัน sshfs เท่านั้นที่สามารถเข้าถึงการเมานต์ นี่เป็นข้อ จำกัด ของฟิวส์ man fuseข้อมูลเพิ่มเติมสามารถดูได้โดยการพิมพ์

คุณควรทราบด้วยว่า (อย่างน้อยบน Ubuntu) คุณต้องเป็นสมาชิกของกลุ่ม 'ฟิวส์' มิฉะนั้นคำสั่งข้างต้นจะบ่นว่าไม่สามารถเข้าถึงได้/etc/fuse.confเมื่อวิ่งโดยไม่มี 'sudo'


2
คำตอบแรกที่ดี!
slm

13
ดูallow_rootตัวเลือกที่จะอนุญาตrootเท่านั้น อย่างไรก็ตามโปรดทราบว่าตัวเลือกเหล่านั้นจะถูก จำกัด ให้รากโดยค่าเริ่มต้นจนกว่าคุณจะเพิ่มบรรทัดuser_allow_other /etc/fuse.conf
Stéphane Chazelas

7

sshfsเป็นกระบวนการ userland sudoจึงมีความจำเป็นต้องทำงานด้วย

หากคุณใช้เป็น sudo และใช้การตรวจสอบความถูกต้องของคีย์ SSH รหัสนั้นจะถูกค้นหาภายใต้/root/.sshและไม่อยู่ภายใต้ผู้ใช้ของ/home/myuser/.sshคุณ

เช่นเดียวกับ~/.ssh/configไฟล์ที่sshfsสามารถใช้งานได้

หากคุณมีสิ่งที่~/.ssh/configชอบ:

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

จากนั้นคุณสามารถติดตั้งโฮสต์ระยะไกลของคุณในฐานะผู้ใช้ปกติด้วย:

sshfs remotehost: local_dir

หากต้องการทำงานภายใต้รูทคุณสามารถต่อท้ายคำสั่ง-o IdentityFile /home/myuser/.ssh/id_rsa'raw' sshfsหรือสร้าง/root/.ssh/configด้วยพา ธ แบบเต็มไปยังคีย์ SSH ของผู้ใช้:

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

ตอนนี้sshfs remotehost: local_dirจะทำงานภายใต้รูต

กับของคุณ.ssh/configในสถานที่ที่คุณสามารถคัดลอกทั้งโฟลเดอร์ระหว่างโฮสต์ด้วย (ระยะไกลเพื่อท้องถิ่น) scp -r remotehost:remotedir localdirหรือ (ท้องถิ่นเพื่อระยะไกล) scp -r localdir remotehost:remotedirเพื่อให้การดำเนินงานเป็นหนึ่งเดียว one-off sshfsที่คุณอาจไม่จำเป็นต้อง

หากคุณใช้เส้นทางระยะไกลแบบสัมพัทธ์เหมือนในขณะremotehost:remotedirนั้นremotedirจะสัมพันธ์กับโฟลเดอร์บ้านของผู้ใช้เช่นremotehost:remotedirเทียบเท่าremotehost:/home/myuser/remotedir


1

สิ่งที่แก้ไขปัญหาสำหรับฉันคือการเพิ่มallow_otherตัวเลือกในคำสั่งดังนี้:

$ sshfs -o allow_other user@example.com:/home/user/my-projects ~/mount/my-projects

จากนั้นคุณอาจได้รับข้อผิดพลาด:

ตัวเลือก allow_other อนุญาตเฉพาะเมื่อมีการตั้งค่า 'user_allow_other' ใน /etc/fuse.conf เพื่อแก้ไขส่วนหัวนั้นเป็น /etc/fuse.conf ด้วยโปรแกรมแก้ไขข้อความที่คุณชื่นชอบและไม่ใส่เครื่องหมายลบ (ลบ # behind) user_allow_other

ถ้านั่นแก้ปัญหาได้และคุณสามารถทำงานได้sshfsสำเร็จเยี่ยมมาก! ถ้าไม่ใช่คุณควรลองเพิ่มผู้ใช้ของคุณไปยังกลุ่มฟิวส์โดยคำสั่งนี้:

$ usermod -a -G mark fuse

และถ้ามันส่งผลให้เกิดข้อผิดพลาดที่บอกว่ากลุ่มฟิวส์ไม่มีอยู่คุณสามารถสร้างกลุ่มนั้นได้อย่างง่ายดายโดย:

$ sudo groupadd mynewgroup
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.