Cómo hacer que automount y sshfs (osxfuse) funcionen con yosemite

Actualmente estoy tratando de hacer que el montaje automático de Apple funcione con osxfuse y sshfs. El resultado debería ser que una carpeta específica se monte automáticamente si se usa.

Lo que he hecho hasta ahora:

  • instalado osxfuse y sshfs de los paquetes oficiales (las versiones son osxfuse: 2.7.3 / sshfs 2.5.0)
  • creó un enlace simbólico/sbin/mount_sshfs -> /usr/local/bin/sshfs
  • agregó la siguiente línea de configuración a /etc/auto_master :/- auto_ssh -nosuid
  • creó el archivo de configuración /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
    
  • luego recargar automount a través de:sudo automount -cv

Si ahora trato de cdentrar mntme sale el siguiente error:

bash: cd: /mnt: Operation not permitted

La consola contiene lo siguiente:

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

¿Alguien tiene alguna idea de cómo hacer que esto funcione, o qué probar a continuación?

Respuestas (5)

FWIW, si alguien más se topa con esta vieja pregunta, la mejor guía que he encontrado para montar sshfs usando el montador automático de Apple está aquí:

http://virtuallyhyper.com/2013/07/mount-various-file-system-with-autofs-on-mac-os-x-mountain-lion/#mount-sshfs-with-autofs

Esto no requiere deshabilitar la Protección de integridad del sistema, ya que los trabajos cron todavía funcionan en el capitán:

$ 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
¿Su respuesta es deshabilitar la Protección de integridad del sistema o es una pregunta nueva?
Esta es solo otra forma de lograr un comportamiento de montaje automático. Esto funciona sin deshabilitar sip..
Ok, solo aclarando. He editado tu respuesta para que quede más claro.
Cuando el volumen ya está montado, arroja un error mount_osxfusefs: mount point /Users/xxx/temp/etc is itself on a OSXFUSE volume. ¿Hay alguna manera de ejecutar el comando solo si está desmontado?
@SaaruLindestøkke puede tener un script bash simple ejecutándose en la pestaña cron (el ejemplo es para la conexión de contraseña, pero debe hacerse una idea) #!/bin/bash umount /Users/shuib/Documents/mountFolder echo "yourSSHpassword" | sshfs toho@drasha.site:/home/toho/draSha/Users/shuib/Documents/mountFolder -o password_stdin

Para macOS Mojave y la última versión de osxfuse, este es el archivo daemon correcto:

<?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_osxfuseahora se encuentra en /Library/Filesystems/osxfuse.fs/Contents/Resources/load_osxfusey el parámetro de kernel correcto esvfs.generic.osxfuse.tunables.allow_other

Más información en la wiki de osxfuse

Actualización 2016-08-03: descubrí que instalar SSHFS desde https://osxfuse.github.io es más estable que la versión homebrew, debido a alguna dependencia anterior (por lo tanto, esto puede mejorar en el futuro).

ADVERTENCIA: Esta conexión es superrápida cuando funciona, pero a menudo tiene problemas después de que finaliza la conexión, por ejemplo, inalámbrica, en espera.


Supone que tiene instalado Homebrew ( haga su vida más fácil y obtenga esto primero )

Instalación de SSHFS

brew install sshfs

Verifique esta carpeta para ver los sistemas de archivos instalados: ls /Library/Filesystemssi no ve osxfusefs.fs, debe instalarlo.

obtener barril

brew tap caskroom/cask

Instalar OSXFUSE

brew cask install osxfuse

Alternativamente, en lugar de homebrew, use las versiones de descarga de https://osxfuse.github.io/

SSHFS + OSXFUSE ahora instalado. Un paso más...

autofsnecesita mount_*binarios.

/usr/local/bin/sshfstambién debería estar disponible como mount_sshfs, por lo que:

Enumere su mount_*s con

compgen -c | grep ^mount

O

ls /sbin | grep mount 

Si no ve mount_sshfs, debe realizar este paso. Este es un paso crítico porque se olvida fácilmente y puede causar dolores de cabeza. Como /sbinestá en la partición del sistema, deberá desactivar SIP y volver a montar la partición con el atributo de escritura .

En el modo de recuperación, abra la terminal y apague SIP y reinicie:

csrutil disable
reboot

Una vez reiniciado, vuelva a montar el volumen del sistema:

sudo mount -uw /

Ahora puede crear el enlace simbólico adecuado:

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

Agregar inicio automático en Boot Daemon en/Library/LaunchDaemons/

El archivo podría llamarse:

Debe ejecutar esto en cada arranque para la extensión del kernel:

/bin/bash -c "/Library/Filesystems/osxfuse.fs/Contents/Resources/load_osxfuse; /usr/sbin/sysctl -w vfs.generic.osxfuse.tunables.allow_other=1"

Así que crea un nuevo archivo de servicio:

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

Contenido:

<?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>

Cargue con launchctl(launchd) para el próximo arranque, que es la versión Mac OS X de systemctl(systemd)

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

Configurar auto_master y auto_sshfs

Lo siguiente asume que puede ingresar a su servidor con una clave segura (no se requiere contraseña).

##/etc/auto_master

/mnt/sshfs                auto_sshfs       -nosuid

##/etc/auto_sshfs Podría usar parámetros que normalmente vienen después de -oin sshfs -o dependiendo de su situación.

  • idmap=usuario: configuración predeterminada. dado que su uid y gid probablemente sean diferentes entre los sistemas operativos, podría asignar el usuario utilizado en user@ip: a su usuario local (cliente). El grupo se ignorará en este caso (lo que significa que las carpetas que no son de su propiedad pero que le otorgan permisos de lectura en el grupo del lado del servidor pueden no ser legibles localmente, en el lado del cliente)

O

  • uid=TUUSUARIO, gid=TUGRUPO: simplemente escribe id TUUSUARIO para obtener los números. Esto simplemente asignará todos los archivos del montaje a esta combinación de usuario/grupo. Esto le permitirá leer todos los archivos. Creo que cualquier archivo o carpeta nueva que cree heredará la configuración predeterminada de umask para cualquier carpeta que monte.

  • allow-other: uso esto, pero es arriesgado porque cualquier usuario que explore el montaje verá el montaje usando las credenciales utilizadas al conectarse.

  • enumerar todos los parámetros con man sshfsy leer ver cada parámetro después de cada-o

reemplazar:

  • YOURUSER con tu nombre de usuario y
  • PRIVATEKEY a su clave, por ejemplo, id_ed25519
  • ip con su dirección IP o nombre de host

Contenido Importante es el parámetro reconnect, de lo contrario, cada vez que pierda la conexión (como ir a dormir), Finder se bloqueará.

Reemplazar

  • $(id -u) con su identificación real en la máquina cliente
  • $(id -g) con su ID de grupo real en la máquina cliente

Desafortunadamente no puedes ejecutar cosas en autofs comoid -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

Prueba

df -Ph /path/to/mount

Lista de sistemas de archivos montados

lsvfs

Listar todos los montajes

mount
He estado tratando de hacer que esto funcione, pero parece que algunos cambios recientes en macOS lo hacen más difícil de lo que debería ser. No es posible vincular sshfs a /usr/sbin/mount_sshfs. ¿Posiblemente un problema con SIP? Por casualidad no conoces una solución alternativa, ¿verdad? (Preferiría no desactivar SIP para realizar la modificación, pero lo haré si es necesario; ¿alguna forma de hacer que /usr/local/sbin/mount_sshfs funcione?)

Revisé todas las guías de montaje automático que pude encontrar y completé con éxito los pasos de esta respuesta , pero al final obtuve un Finder colgado y no pude desmontarlo a través de la Terminal.

Por lo tanto, me gustaría mencionar una opción alternativa, menos intrusiva: Acciones de carpeta .

En el pasado, estos no eran confiables, por lo que su millaje puede variar, pero para mí (en Catalina) funcionan de manera confiable hasta ahora (1 día después).

  1. Abra el Editor de secuencias de comandos.
  2. Cree un script con el siguiente contenido:
on opening folder this_folder
    do shell script "/usr/local/bin/sshfs user@ipaddress:remote_path ~/mnt/volume_name -o volname=desired_volume_name"
end opening folder
  1. Compile este script en el Editor de scripts (usando el ícono 🔨)
  2. Guarde este archivo con ~/Library/Scripts/Folder Action Scripts/cualquier nombre que considere descriptivo.
  3. Vaya a la carpeta principal que contendrá el volumen montado. En el ejemplo anterior eso es ~/mnt.
  4. Haga clic con el botón derecho en ~/mnt, vaya a ServiciosConfiguración de acciones de carpeta...Ejecutar servicio y:
    • Habilitar acciones de carpeta
    • Haga clic en el signo ➕ en el panel derecho y agregue el script del paso 4

Ahora, cada vez que abra la carpeta ~/mnt, el sshfscomando intentará montar el volumen remoto en ~/mnt/desired_volume_name.