Sshfs (Español) - ArchWiki

# Sshfs (Español)

Puedes usar sshfs para montar un sistema remoto (accesible mediante SSH) en un directorio local, de forma que podrás hacer cualquier operación sobre los archivos montados, con cualquier herramienta (copiar, renombrar, editar, etc.). En general, se recomienda el uso de sshfs en lugar de shfs, ya que no se ha publicado una nueva versión de shfs desde 2004.

## Instalación

Instala sshfs desde los repositorios oficiales.

### Montar

Antes de intentar montar un directorio, asegúrate de que los permisos del directorio donde lo deseas montar permiten del acceso correcto del usuario. Para montar un directorio remoto ejecuta `sshfs`:

    $ sshfs USUARIO@HOSTNAME_O_IP:/RUTA_REMOTA PUNTO_DE_MONTAJE_LOCAL OPCIONES_DE_SSH

Por ejemplo:

    $ sshfs sessy@mycomputer:/foo/bar /mnt/bar -C -p 9876

Donde `9876` es el número de puerto del servicio ssh en el servidor `mycomputer`.

Nota: Los usuarios pueden definir un puerto no estándar para un servidor en `~/.ssh/config`, para evitar añadir la opción `-p` cada vez. Para más información ver este apartado.

SSH te pedirá la contraseña, si es necesario. Si no quieres tener que introducir la contraseña cada vez, es recomendable usar claves SSH.

Sugerencia: Para montar rápidamente un directorio remoto, hacer alguna operación sobre archivos y desmontarlo, utiliza un script como este:

    sshfs USUARIO@HOSTNAME_O_IP:/RUTA_REMOTA PUNTO_DE_MONTAJE_LOCAL OPCIONES_DE_SSH
    mc ~ PUNTO_DE_MONTAJE_LOCAL
    fusermount -u PUNTO_DE_MONTAJE_LOCAL

Esto montará el directorio remoto, ejecutará MC, y lo desmontará cuando cierres MC.

### Desmontar

Para desmontar el sistema remoto:

    $ fusermount -u PUNTO_DE_MONTAJE_LOCAL

Ejemplo:

    $ fusermount -u /mnt/sessy

## Chroot

Quizá quieras restringir a un usuario a un directorio en concreto (y sus subdirectorios). Para hacer esto, edita `/etc/ssh/sshd_config`:

    /etc/ssh/sshd_config

    .....
    Match User usuario
           ChrootDirectory /chroot/%u
           ForceCommand internal-sftp #para obligar al usuario a usar solo sftp
           AllowTcpForwarding no
           X11Forwarding no
    .....

Nota: El directorio de `chroot` debe ser propiedad del usuario `root`. Si no, no serás capaz de conectar. Para más información, busca `Match, ChrootDirectory` y `ForceCommand` en las páginas del manual.

## Asistentes

Si necesitas montar sistemas de archivos con sshfs frecuentemente, puede interesarte usar un asistente de sshfs, como sftpman. Este proporciona una línea de órdenes y una interfaz GTK para hacer que el montaje y desmontaje se puede hacer con un solo click.

## Automontaje

El automontaje se puede hacer al arrancar, o bajo demanda (cuando se acceda al directorio). En ambos casos, hay que modificar la configuración en `/etc/fstab`.

Nota: Ten presente que el automontaje se hace a través del usuario root, por lo que no puedes usar la información configurada en el `.ssh/config` de un usuario normal.

Para permitir que root use la clave SSH de un usuario normal, especifica su ruta completa con la opción `IdentityFile`.

Y lo más importante, monta manualmente, como root, al menos una vez cada sistema de archivos sshfs, para que la firma del servidor se añada al archivo `.ssh/known_hosts`.

### Bajo demanda

Con `systemd` es posible configurar el montaje bajo demanda en `/etc/fstab`.

Ejemplo:

    usuario@servidor:/directorio/remoto /punto/de/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 son noauto,x-systemd.automount,_netdev.

- noauto indica que no se monte al arrancar
- x-systemd.automount indica que se monte bajo demanda
- _netdev indica que es un dispositivo de red, no un dispositivo de bloques (sin esta opción podrían aparecer errores de tipo "Dispositivo no encontrado")

### Al arrancar

Un ejemplo de como usar sshfs para montar un sistema de archivos remoto mediante `/etc/fstab`:

    USUARIO@HOSTNAME_O_IP:/DIRECTORIO/REMOTO  /PUNTO/DE/MONTAJE/LOCAL  fuse.sshfs  defaults,_netdev  0  0

Por ejemplo, esta línea en fstab:

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

Esto funcionará automáticamente si estás usando un clave SSH para el usuario. Ver claves SSH.

Si quieres usar sshfs con varios usuarios:

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

De nuevo, es importante establecer la opción de montaje _netdev para asegurarse de que la red está disponible antes de intentar el montaje.

### Acceso seguro de usuario

Cuando se hace el automontaje desde `/etc/fstab`, normalmente el sistema de archivos se montará como root. Por defecto, esto tiene resultados indeseables si deseas acceder como usuario normal y limitar el acceso a otros usuarios.

Un ejemplo de configuración:

    USUARIO@HOSTNAME_O_IP:/DIRECTORIO/REMOTO  /PUNTO/DE/MONTAJE/LOCAL  fuse.sshfs noauto,x-systemd.automount,_netdev,user,idmap=usuario,transform_symlinks,identityfile=/home/USUARIO/.ssh/id_rsa,allow_other,default_permissions,uid=USER_ID_N,gid=USER_GID_N 0 0

Resumen de opciones relevantes:

- allow_other - Permite que usuarios distintos a root accedan al directorio.
- default_permissions - Permite que el kernel establezca los permisos (es decir, que se usen los permisos del sistema remoto). Esto permite prohibir el acceso a todos excepto si se añade allow_other.
- uid, gid - establece la propiedad de los archivos a estos valores; uid es la identificación numérica de tu usuario, gid es la identificación numérica del grupo.

## Opciones

sshfs puede convertir automáticamente las IDs de tus usuarios local y remoto.

Añade la opciónidmap con el valor user para convertir el UID del usuario que se conecta:

    # sshfs -o idmap=user sessy@mycomputer:/home/sessy /mnt/sessy -C -p 9876

Esto asignará el UID del usuario remoto "sessy" al usuario local, que ejecuta este proces ("root" en el ejemplo anterior) y el GID permanece sin cambios. Si necesitas un control más preciso en la conversión de UID y GID, mira las opciones idmap=file, uidfile y gidfile.

## Solución de problemas

### Lista de comprobación

Lee este párrafo primero. Otras cosas a comprobar son:

1. ¿Estás recibiendo información adicional del archivo `/etc/issue` del servidor? Esto podría confundir a SSHFS. Deberías desactivar temporalmente el archivo `/etc/issue`:

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

2. Ten en cuenta que la mayoría de artículos sobre resolución de problemas relacionados con SSH que encontrarás en la red no están relacionados con Systemd. Es frecuente que las configuraciones de `/etc/fstab` comiencen erróneamente con `sshfs#usuario@host:/mnt/servidor/directorio ... fuse ...` en lugar de usar la sintaxis `usaurio@host:/mnt/servidor/directorio ... fuse.sshfs ... x-systemd, ...`.

3. Comprueba que el propietario del directorio de origen en el servidor y sus contenidos es el usuario del servidor.

    $ chown -R USER_S: /mnt/servers/folder

4. El ID del usuario del servidor puede ser diferente del ID del usuario del cliente. Obviamente, ambos nombres de usuario deben ser iguales. Solo tienes que preocuparte por el ID del usuario del cliente. SSHFS convertirá este UID con las siguientes opciones de montaje:

    uid=USER_C_ID,gid=GROUP_C_ID

5. Comprueba que el punto de montaje del cliente (directorio) es propiedad del usuario del cliente. Este directorio debería tener la misma ID de usuario que se define en las opciones de montaje de SSHFS.

    $ chown -R USER_C: /mnt/client/folder

6. Comprueba que el punto de montaje del cliente (directorio) está vacío. Por defecto, no puedes montar sistemas de archivos SSHFS en directorios no vacíos.

7. Si quieres automontar sistemas de archivos SSHFS usando identificación mediante clave pública (sin contraseña) mediante `/etc/fstab`, puedes usar esta línea como ejemplo:

    USER_S@SERVER:/mnt/on/server      /nmt/on/client        fuse.sshfs      x-systemd.automount,_netdev,user,idmap=user,transform_symlinks,identityfile=/home/USER_C/.ssh/id_rsa,allow_other,default_permissions,uid=USER_C_ID,gid=GROUP_C_ID,umask=0   0 0

Considera como ejemplo la siguiente configuración:

SERVER = Server host name (serv) USER_S = Server user name (pete) USER_C = Client user name (pete) USER_S_ID = Server user ID (1004) USER_C_ID = Client user ID (1000) GROUP_C_ID = Client user's group ID (100)

puedes obtener el UID y GID del usuario del cliente con

    $ id USERNAME

esta es la línea que habría que incluir en `/etc/fstab`:

    pete@serv:/mnt/on/server      /nmt/on/client        fuse.sshfs      x-systemd.automount,_netdev,user,idmap=user,transform_symlinks,identityfile=/home/pete/.ssh/id_rsa,allow_other,default_permissions,uid=1004,gid=1000,umask=0   0 0

8. Si conoces otro problema a tener en cuenta en esta lista, por favor, añádelo.

### Conexión reiniciada por par (connection reset by peer)

- Si estás intentando acceder al sistema remoto con un nombre de host, intenta utilizar la dirección IP en su lugar, ya que puede ser un problema de resolución de nombres de dominio. Asegúrate de editar `/etc/hosts` con los detalles del servidor.
- Si estás usando nombres de clave no estándar y las estás indicando como `-i .ssh/mi_clave`, esto no funcionará. Tienes que usar `-o IdentityFile=/home/user/.ssh/mi_clave`, con la ruta completa de la clave.
- Añadir la opción '`sshfs_debug`' (p.ej. '`sshfs -o sshfs_debug user@server ...`') puede ayudarte a resolver el problema.
- Si estás intentando usar sshfs a través de un router que usa DD-WRT o similar, hay una solución aquí. Observa que la opción -osftp_server=/opt/libexec/sftp-server se puede usar con el comando sshfs command en lugar de parchear dropbear)
- Viejo hilo del foro: sshfs: Connection reset by peer
- Asegúrate de que el usuario puede iniciar sesión en el servidor (especialmente cuando se use AllowUsers).

Nota: Cuando uses más de una opción para sshfs, debes separarlas por comas. P.ej: '`sshfs -o sshfs_debug,IdentityFile=</path/to/key> user@server ...`')

### Servidor remoto se ha desconectado

Si recibes este mensaje justo después de intentar usar sshfs:

- Primero asegúrate de que la máquina remota tiene sftp instalado. Si no, no funcionará.

Sugerencia: Si tu servidor remoto está usando OpenWRT: `opkg install openssh-sftp-server` será suficiente

- Después, intenta comprobar la ruta del `Subsystem` listado en `/etc/ssh/sshd_config` en la máquina remota para ver si es válida. PUedes comprobar la ruta con `find / -name sftp-server`.

Para Arch Linux el valor por defecto en `/etc/ssh/sshd_config` es `Subsystem sftp /usr/lib/ssh/sftp-server`.

### Thunar tiene problemas con FAM y el acceso a archivos remotos

Si las carpetas remotas no se muestran, y en su lugar se muestra tu directorio home, o si tienes otros problemas para acceder a archivos remotos mediante Thunar, reemplaza fam por gamin. Gamin procede de fam.

### El apagado se interrumpe cuando sshfs está montado

Systemd puede interrumpirse durante el apagado si se montó manualmente un sistema de archivos sshfs y no se desmontó antes de apagar. Para solucionar este problema, crea este archivo (como root):

    /etc/systemd/system/killsshfs.service

    [Unit]
    After=network.target

    [Service]
    RemainAfterExit=yes
    ExecStart=-/bin/true
    ExecStop=-/usr/bin/pkill sshfs

    [Install]
    WantedBy=multi-user.target

Para activar el servicio: `systemctl enable killsshfs.service`

## Ver también

- sftpman - herramienta asistente de sshfs
- SSH
- Como montar sistemas de archivos SSH en una jaula, con especial atención en los usuarios y permisos.

Category:

- Secure Shell (Español)