Làm cách nào để automount và sshfs (osxfuse) hoạt động với yosemite


6

Tôi hiện đang cố gắng để automount của Apple hoạt động với osxfuse và sshfs. Kết quả sẽ là một thư mục được chỉ định sẽ tự động được gắn nếu nó được sử dụng.

Những gì tôi đã làm cho đến nay:

  • cài đặt osxfuse và sshfs từ các gói chính thức (phiên bản là osxfuse: 2.7.3 / sshfs 2.5.0)
  • đã tạo một liên kết tượng trưng /sbin/mount_sshfs -> /usr/local/bin/sshfs
  • nối thêm dòng cấu hình sau vào / etc / auto_master: /- auto_ssh -nosuid
  • đã tạo tệp cấu hình / etc / auto_ssh:

    /mnt -fstype=sshfs,sshfs_debug,allow_other,idmap=user,follow_symlinks,max_read=65536,rw,nodev,cache=no,IdentityFile=/Users/myUsername/.ssh/sshfs remoteUser@remoteHost:/path/to/folder
    
  • sau đó tải lại automount qua: sudo automount -cv

Nếu bây giờ tôi cố gắng cdvào mnttôi nhận được lỗi sau:

bash: cd: /mnt: Operation not permitted

Bảng điều khiển chứa các mục sau:

04/12/14 01:27:50,418 automountd[1965]: MOUNT  REQUEST: name=/mnt [] map=auto_ssh opts=nosuid path=/mnt direct=1
04/12/14 01:27:50,631 KernelEventAgent[69]: tid 54485244 received event(s) VQ_DEAD (32)
04/12/14 01:27:50,632 automountd[1965]: MOUNT  REPLY  : status=1, AUTOFS_DONE
04/12/14 01:27:50,632 automountd[1965]: mount of /mnt failed: Operation not permitted

Có ai có bất kỳ ý tưởng làm thế nào để làm cho công việc này, hoặc những gì để thử tiếp theo?

Câu trả lời:



2

Cập nhật 2016-08-03: Tôi thấy rằng việc cài đặt SSHFS từ https://osxfuse.github.io ổn định hơn phiên bản homebrew, vì một số phụ thuộc cũ (do đó điều này có thể cải thiện trong tương lai).

CAVEAT: Kết nối này cực nhanh khi hoạt động, nhưng thường gặp sự cố sau khi kết thúc kết nối do không dây, ở chế độ chờ.


Giả sử bạn đã cài đặt Homebrew ( làm cho cuộc sống của bạn dễ dàng hơn và có được điều này trước tiên )

Cài đặt SSHFS

brew install sshfs

Kiểm tra thư mục này để xem các hệ thống tệp đã cài đặt: ls /Library/Filesystems Nếu bạn không thấy osxfusefs.fs, bạn cần cài đặt nó.

Nhận Cask

brew tap caskroom/cask

Cài đặt OSXFUSE

brew cask install osxfuse

Ngoài ra, thay vì homebrew, hãy sử dụng các phiên bản tải xuống từ https://osxfuse.github.io/

SSHFS + OSXFUSE đã được cài đặt. Thêm một bước...

autofscần mount_*nhị phân.

/usr/local/bin/sshfscũng nên có sẵn như mount_sshfs, vì vậy:

Liệt kê của bạn mount_*với

compgen -c | grep ^mount

HOẶC LÀ

ls /sbin | grep mount 

Nếu bạn không thấy mount_sshfs, bạn cần thực hiện bước này. Đây là một bước quan trọng vì nó dễ bị lãng quên và có thể tạo ra đau đầu.

sudo ln -s $(which sshfs) /sbin/mount_sshfs

Thêm Tự động khởi động tại Boot Daemon trong /Library/LaunchDaemons/

Tập tin có thể được gọi là:

Bạn cần chạy cái này ở mỗi lần khởi động cho phần mở rộng kernel:

/bin/bash -c "/Library/Filesystems/osxfusefs.fs/Support/load_osxfusefs; /usr/sbin/sysctl -w osxfuse.tunables.allow_other=1"

Vì vậy, tạo một tệp dịch vụ mới:

/Library/LaunchDaemons/load.osxfusefs.tunables.plist

Nội dung:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>sysctl</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>-c</string>
        <string>/Library/Filesystems/osxfusefs.fs/Support/load_osxfusefs; /usr/sbin/sysctl -w osxfuse.tunables.allow_other=1</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Tải với launchctl(launchd) cho lần khởi động tiếp theo, đó là phiên bản Mac OS X của systemctl(systemd)

launchctl load /Library/LaunchDaemon/load.osxfusefs.tunables.plist

Thiết lập auto_master và auto_sshfs

Giả định sau đây bạn có thể ssh vào máy chủ của mình bằng khóa bảo mật (không yêu cầu mật khẩu).

/ etc / auto_master

/mnt/sshfs                auto_sshfs       -nosuid

/ etc / auto_sshfs

Bạn có thể sử dụng các thông số thường đến sau khi -osshfs -otùy thuộc vào tình hình của bạn.

  • idmap = user: cài đặt mặc định. vì uid và gid của bạn có thể khác nhau giữa các hệ điều hành, bạn chỉ có thể ánh xạ người dùng được sử dụng trong người dùng @ ip: tới người dùng (máy khách) cục bộ của bạn. Nhóm này sẽ bị bỏ qua trong trường hợp này (có nghĩa là các thư mục chưa thuộc quyền sở hữu của bạn cấp cho bạn quyền đọc trên nhóm phía máy chủ có thể không đọc được cục bộ - ở phía máy khách)

HOẶC LÀ

  • uid = YOUUSERID, gid = YOUGROUPID: chỉ cần nhập id YOUUSER để lấy số. Điều này sẽ chỉ ánh xạ tất cả các tệp từ mount đến tổ hợp người dùng / nhóm này. Điều này sẽ cho phép bạn đọc tất cả các tập tin. Tôi nghĩ rằng bất kỳ tệp / thư mục mới nào bạn tạo sẽ kế thừa cài đặt ô mặc định cho bất kỳ thư mục nào bạn gắn kết.

  • allow-other: Tôi sử dụng cái này, nhưng rất rủi ro vì bất kỳ người dùng nào duyệt mount sẽ xem mount bằng cách sử dụng thông tin đăng nhập được sử dụng khi kết nối.

  • liệt kê tất cả các tham số với man sshfsvà đọc xem từng tham số sau mỗi-o

thay thế:

  • NGƯỜI BẠN với tên người dùng của bạn và
  • RIÊNG TƯ cho khóa của bạn, ví dụ id_ed25519
  • ip với địa chỉ IP hoặc tên máy chủ của bạn

Nội dung Quan trọng là tham số reconnect, nếu không, bất cứ khi nào bạn mất kết nối (như đi ngủ), Finder sẽ bị sập.

Thay thế

  • $ (id -u) với id thực tế của bạn trên máy khách
  • $ (id -g) với id nhóm thực của bạn trên máy khách

Thật không may, bạn không thể thực thi mọi thứ trong autofs như id -u

NameOfMountThatGetsIgnored -fstype=sshfs,port=22,reconnect,uid=$(id -u),gid=$(id -g),follow_symlinks,allow_other,IdentityFile=/Users/YOURUSER/.ssh/PRIVATEKEY,volname="NameOfMount"     YOURUSER@ip:/path/on/server

Kiểm tra

df -Ph /path/to/mount

Liệt kê các hệ thống tập tin gắn

lsvfs

Liệt kê tất cả các gắn kết

mount

1
Tôi đã cố gắng để làm cho điều này hoạt động, nhưng có vẻ như một số thay đổi gần đây trong macOS làm cho nó trở nên khó khăn hơn mức cần thiết. Không thể liên kết symsh sshfs vào / usr / sbin / mount_sshfs. Có thể là một vấn đề với SIP? Bạn không biết cách giải quyết, phải không? (thà không tắt SIP để thực hiện sửa đổi, nhưng tôi sẽ làm nếu tôi phải; có cách nào để / usr / local / sbin / mount_sshfs hoạt động không?)
Morgan Rodgers

1

Điều này không yêu cầu vô hiệu hóa Bảo vệ toàn vẹn hệ thống, vì các công việc định kỳ vẫn đang hoạt động trong đội trưởng:

$ crontab -e

*/5 * * * *  /usr/local/bin/sshfs 192.168.1.2:/etc /Users/xxx/temp/etc -o uid=$(id -u) -o gid=$(id -g) -o reconnect

Là câu trả lời của bạn để vô hiệu hóa Bảo vệ toàn vẹn hệ thống hay đây là một câu hỏi mới?
abc

Đây chỉ là một cách khác để đạt được một hành vi tự động. Điều này hoạt động mà không vô hiệu hóa sip ..
Benni

Ok, chỉ cần làm rõ. Tôi đã chỉnh sửa câu trả lời của bạn để làm cho nó rõ ràng hơn.
abc

0

Đối với macOS Mojave và phiên bản mới nhất của osxfuse, đây là tệp daemon chính xác:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>sysctl</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>-c</string>
        <string>/Library/Filesystems/osxfuse.fs/Contents/Resources/load_osxfuse; /usr/sbin/sysctl -w vfs.generic.osxfuse.tunables.allow_other=1</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

load_osxfusehiện được đặt tại /Library/Filesystems/osxfuse.fs/Contents/Resources/load_osxfusevà tham số kernel đúng làvfs.generic.osxfuse.tunables.allow_other

Thêm thông tin tại wiki osxfuse

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.