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.
Contents
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
.
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.
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 .....
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
.
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).
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á.
- 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 confind / -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.