SSHFS (Español)

From ArchWiki
Esta traducción de SSHFS fue revisada el 2020-12-06. Si existen cambios puede actualizarla o avisar al equipo de traducción.

SSHFS es un cliente de sistema de archivos basado en FUSE para montar directorios remotos a través de una conexión Secure Shell.

Instalación

Instale el paquete sshfs.

Sugerencia:
  • Si a menudo necesita montar sistemas de archivos sshfs, puede estar interesado en utilizar un ayudante sshfs, como qsshfsAUR, sftpman, sshmntAUR o fmount.py.
  • Es posible que desee utilizar Google Authenticator para proporcionar seguridad adicional como es la autenticación de dos pasos.
  • SSH keys puede ser utilizado sobre la autenticación tradicional de contraseña.

Montaje

Para poder montar un directorio, el usuario de SSH necesita poder acceder a él. Invoque sshfs para montar un directorio remoto:

$ sshfs [usuario@]host:[dir] puntodemontaje [opciones]

Por ejemplo:

$ sshfs miusuario@micomputadora:/ruta/remota /ruta/local -C -p 9876

Aquí -p 9876 especifica el número de puerto y -C activa la compresión. Para más opciones véase la sección #Opciones.

Cuando no se especifica, la ruta remota se establece de manera predeterminada en el directorio de inicio del usuario remoto. Los nombres de usuario y las opciones predeterminadas se pueden predefinir para cada computadora en ~/.ssh/config para simplificar el uso de sshfs. Para obtener más información, véase OpenSSH#Client usage.

SSH le pedirá la contraseña, si es necesario. Si no desea escribir la contraseña varias veces al día, véase SSH keys.

Desmontaje

Para desmontar el sistema remoto:

$ fusermount3 -u puntodemontaje

Por ejemplo:

$ fusermount3 -u /ruta/local

Opciones

sshfs' puede convertir automáticamente entre ID de usuarios locales y remotos. Utilice la opción idmap=user para traducir el UID del usuario que se conecta al usuario remoto miusuario (GID permanece sin cambios):

$ sshfs miusuario@micomputadora:/ruta/remota /ruta/local -o idmap=user

Si necesita más control sobre la traducción de UID y GID, mire las opciones idmap=file, uidfile y gidfile.

Se puede encontrar una lista completa de opciones en sshfs(1).

Haciendo Chroot

Es posible que desee restringir un usuario específico a un directorio específico en el sistema remoto. Esto se puede hacer editando /etc/ssh/sshd_config:

/etc/ssh/sshd_config
.....
Match User algúnusuario 
       ChrootDirectory /chroot/%u
       ForceCommand internal-sftp
       AllowTcpForwarding no
       X11Forwarding no
.....
Nota: El directorio chroot debe ser propiedad del superusuario (root), de lo contrario no podrá conectarse.

Véase también SFTP chroot. Para más información revise la página del manual sshd_config(5) para Match, ChrootDirectory y ForceCommand.

Montaje automático

El montaje automático puede ocurrir en el arranque o bajo demanda (al acceder al directorio). Para ambos, la configuración ocurre en fstab.

Nota: Tenga en cuenta que el montaje automático se realiza a través del superusuario, por lo tanto, no puede utilizar anfitriones (hosts) configurados en .ssh/config de su usuario normal.

Para permitir que el superusuario utilice una clave SSH de un usuario normal, especifique su ruta completa en la opción IdentityFile.

Y más importante, utilice manualmente cada montaje sshfs al menos una vez cuando sea superusuario para que la firma del anfitrión se añada al archivo /root/.ssh/known_hosts.

Bajo demanda

Con systemd es posible el montaje bajo demanda utilizando entradas /etc/fstab.

Por ejemplo:

usuario@host:/carpeta/remota /punto/montaje  fuse.sshfs noauto,x-systemd.automount,_netdev,users,idmap=user,IdentityFile=/home/usuario/.ssh/id_rsa,allow_other,reconnect 0 0

Las opciones de montaje importantes aquí son noauto,x-systemd.automount,_netdev.

  • noauto le dice que no se monte en el arranque
  • x-systemd.automount hace la magia bajo demanda
  • _netdev le dice que es un dispositivo de red, no un dispositivo de bloque (sin él pueden ocurrir errores del tipo "No existe dicho dispositivo")
Nota: Después de editar /etc/fstab, (re)inicie el servicio requerido: systemctl daemon-reload seguido por systemctl restart <objetivo> donde <objetivo> se puede encontrar ejecutando systemctl list-unit-files --type automount

En el arranque

Un ejemplo de cómo utilizar sshfs para montar un sistema de archivos remoto a través de /etc/fstab

USUARIO@NOMBREHOST_O_IP:/DIRECTORIO/REMOTO  /PUNTOMONTAJE/LOCAL  fuse.sshfs  defaults,_netdev  0  0

Tomemos, por ejemplo, la línea fstab

llib@192.168.1.200:/home/llib/FAH  /media/FAH2  fuse.sshfs  defaults,_netdev  0  0

Lo anterior funcionará automáticamente si está utilizando una clave SSH para el usuario. Véase Uso de claves SSH.

Si quiere utilizar sshfs con múltiples usuarios:

usuario@dominio.org:/home/usuario  /media/usuario   fuse.sshfs    defaults,allow_other,_netdev    0  0

Una vez más, es importante configurar la opción de montaje _netdev para asegurarse de que la red esté disponible antes de intentar montar.

Acceso de usuario seguro

Al realizar el montaje automático a través de fstab, el sistema de archivos generalmente será montado por el superusuario. De forma predeterminada, esto produce resultados indeseables si desea acceder como un usuario normal y limitar el acceso a otros usuarios.

Un ejemplo de configuración del punto de montaje:

USUARIO@NOMBREHOST_O_IP:/DIRECTORIO/REMOTO  /PUNTOMONTAJE/LOCAL  fuse.sshfs noauto,x-systemd.automount,_netdev,user,idmap=user,follow_symlinks,identityfile=/home/USUARIO/.ssh/id_rsa,allow_other,default_permissions,uid=N_ID_USUARIO,gid=N_GID_USUARIO 0 0

Resumen de las opciones relevantes:

  • allow_other - Permite que otros usuarios que no sean el montador (es decir, el superusuario) accedan al recurso compartido.
  • default_permissions - Permite que el kernel verifique los permisos, es decir, utilice los permisos reales en el sistema de archivos remoto. Esto permite prohibir el acceso a todas las personas que de otra forma concede allow_other.
  • uid, gid - establece la propiedad de archivos reportada a unos valores determinados; uid es el ID numérico de su usuario, gid es el ID numérico del grupo de su usuario.

Solución de problemas

Lista de comprobación

Lea primero OpenSSH (Español)#Lista de comprobación. Otros temas para verificar son:

1. ¿Su inicio de sesión SSH está enviando información adicional desde, por ejemplo, el archivo /etc/issue del servidor? Esto podría confundir SSHFS. Debería desactivar temporalmente el archivo /etc/issue del servidor:

$ mv /etc/issue /etc/issue.orig

2. Tenga en cuenta que la mayoría de los artículos de solución de problemas relacionados con SSH que encontrará en la web no están relacionados con Systemd. A menudo las definiciones en /etc/fstab comienzan erroneamente con sshfs#user@host:/mnt/servidores/carpeta ... fuse ... en lugar de utilizar la sintaxis user@host:/mnt/servidores/carpeta ... fuse.sshfs ... x-systemd, ....

3. Compruebe que el propietario de la carpeta de origen y el contenido del servidor es propiedad del usuario del servidor.

$ chown -R USER_S: /mnt/servidores/carpeta

4. El ID de usuario del servidor puede ser diferente del cliente. Obviamente ambos nombres de usuario tienen que ser los mismos. Solo tiene que cuidar los ID de usuario del cliente. SSHFS traducirá el UID con las siguientes opciones de montaje:

uid=ID_USUARIO_C,gid=ID_GRUPO_C

5. Compruebe que el punto de montaje de destino del cliente (carpeta) es propiedad del usuario cliente. Esta carpeta debe tener el mismo ID de usuario definido en las opciones de montaje de SSHFS.

$ chown -R USUARIO_C: /mnt/cliente/carpeta

6. Compruebe que el punto de montaje (carpeta) del cliente esté vacío. De forma predeterminada no puede montar carpetas SSHFS en carpetas no vacías.

Connection reset by peer

  • Si está intentando acceder al sistema remoto con un nombre de host, intente utilizar su dirección IP, ya que puede ser un problema de resolución de nombres de dominio. Asegúrese de editar /etc/hosts con los detalles del servidor.
  • Si está utilizando nombres de clave no predeterminados y los está pasando como -i .ssh/my_key, no funcionará. Tiene que utilizar -o IdentityFile=/home/user/.ssh/my_key, con la ruta completa a la clave.
  • Si su /root/.ssh/config es un enlace simbólico, recibirá este error también. Véase este tema en serverfault
  • Añadiendo la opción 'sshfs_debug' (como en 'sshfs -o sshfs_debug user@server ...') puede ayudar a resolver el problema.
  • Si eso no revela nada útil, también puede intentar añadir la opción 'debug'
  • Si está intentando hacer sshfs a través de un enrutador que utiliza DD-WRT o similar, hay una solución aquí. (tenga en cuenta que la opción -osftp_server=/opt/libexec/sftp-server se puede utilizar para la orden sshfs en lugar de parchear dropbear)
  • Si ve esto solo durante el arranque, puede ser que systemd esté intentando montar antes de que haya una conexión de red disponible. Habilite el servicio de 'espera-en-línea' apropiado para su conexión de red (por ejemplo, systemd-networkd-wait-online.service) para solucionar esto.
  • Hilo antiguo del foro: sshfs: Connection reset by peer
  • Asegúrese de que su usuario pueda iniciar sesión en el servidor (especialmente al utilizar AllowUsers)
  • Asegúrese de que Subsystem sftp /usr/lib/ssh/sftp-server está activado en /etc/ssh/sshd_config.
Nota: Cuando se proporciona más de una opción para sshfs, deben estar separadas por comas. Al igual que: 'sshfs -o sshfs_debug,IdentityFile=</ruta/a/la/clave> usuario@servidor ...')

El host remoto se ha desconectado

Si recibe este mensaje directamente después de intentar utilizar sshfs:

  • Primero asegúrese de que la máquina remota tiene instalado sftp. No funcionará si no lo tiene.
  • Después, comprueba que la ruta de Subsystem sftp en /etc/ssh/sshd_config en la máquina remota es válida.

Problemas de montaje fstab

Para obtener una salida de depuración detallada, añada lo siguiente a las opciones de montaje:

ssh_command=ssh\040-vv,sshfs_debug,debug
Nota: Aquí, \040 representa un espacio que fstab utiliza para separar campos.

Para poder ejecutar mount -av y ver la salida de depuración, elimine lo siguiente:

 noauto,x-systemd.automount

Véase también