SFTP funciona dentro de tu conexión SSH actual, así que no necesita software adicional en el servidor ni otro puerto. En un VPS Linux Infrawire es la forma más segura de subir un sitio web o bajar copias de seguridad con un cliente gráfico como FileZilla. Esta guía cubre el acceso con contraseña y con clave, los permisos de archivos y un usuario limitado a SFTP.
📋 Requisitos previos
- Un VPS Linux (Ubuntu 24.04, Debian 12, AlmaLinux 9 o Rocky 9) con SSH funcionando en el puerto 22.
- La IP del VPS y la contraseña de root, disponibles en tu área de cliente.
- FileZilla Client instalado en tu ordenador (el Client, no FileZilla Server).
1. Conectar rápidamente con contraseña
Para una primera prueba, usa la barra de conexión rápida de la parte superior de FileZilla:
- Servidor:
sftp://VPS_IP - Usuario:
USER - Contraseña: tu contraseña
- Puerto:
22
Acepta la clave del host la primera vez. El panel derecho muestra el árbol de archivos del servidor. Es mejor usar un usuario normal que root: un clic equivocado hará menos daño.
Bashadduser USER usermod -aG sudo USER
En AlmaLinux o Rocky usa useradd -m USER, passwd USER y usermod -aG wheel USER.
2. Acceder con una clave SSH
Las claves son más seguras que las contraseñas y no se pueden adivinar por fuerza bruta. En tu ordenador, genera un par de claves y copia la parte pública al servidor.
Bashssh-keygen -t ed25519 -C "filezilla" ssh-copy-id USER@VPS_IP
En FileZilla abre Editar > Preferencias > Conexión > SFTP > Añadir archivo de claves y elige tu clave privada (el archivo sin .pub). FileZilla puede ofrecerse a convertirla a su propio formato; acepta. Nunca compartas la clave privada.
3. Guardar la conexión en el Gestor de sitios
- Abre Archivo > Gestor de sitios y pulsa Nuevo sitio.
- Protocolo: SFTP - SSH File Transfer Protocol.
- Servidor:
VPS_IP, Puerto:22. - Tipo de acceso: Normal para contraseña, o Archivo de clave para una clave.
- Usuario:
USER. En la pestaña Avanzado define el directorio remoto por defecto, por ejemplo/var/www/example.com. - Pulsa Conectar. El sitio queda guardado para la próxima vez.
Evita guardar contraseñas en un equipo que no controlas.
4. Ajustar propietario y permisos de los archivos web
Los archivos subidos suelen quedar con el propietario equivocado, lo que provoca errores 403 o 500. Asigna el directorio web a tu usuario y deja que el servidor web lo lea.
Bashmkdir -p /var/www/example.com chown -R USER:www-data /var/www/example.com find /var/www/example.com -type d -exec chmod 755 {} \; find /var/www/example.com -type f -exec chmod 644 {} \;
En AlmaLinux y Rocky el grupo del servidor web es apache en lugar de www-data. Las carpetas en las que la aplicación deba escribir (subidas, caché) pueden ponerse en 775, con el grupo del servidor web como grupo propietario. Nunca uses chmod -R 777. En FileZilla también puedes hacer clic derecho en un archivo y elegir Permisos de archivo.
5. Opcional: un usuario solo SFTP encerrado en una carpeta
Para dar a un cliente acceso a una sola carpeta sin shell, usa un chroot. El propio directorio chroot debe pertenecer a root y no ser escribible por nadie más; si no, sshd rechaza el acceso.
Bashgroupadd sftpusers useradd -M -d /files -s /usr/sbin/nologin -G sftpusers CLIENT passwd CLIENT mkdir -p /var/sftp/CLIENT/files chown root:root /var/sftp/CLIENT chmod 755 /var/sftp/CLIENT chown CLIENT:CLIENT /var/sftp/CLIENT/files
Añade este bloque al final de /etc/ssh/sshd_config:
INI1Match Group sftpusers 2 ChrootDirectory /var/sftp/%u 3 ForceCommand internal-sftp 4 AllowTcpForwarding no 5 X11Forwarding no
Comprueba la sintaxis antes de recargar y mantén abierta tu sesión SSH actual hasta confirmar que un nuevo acceso funciona.
Bashsshd -t systemctl reload ssh
El servicio se llama ssh en Ubuntu y Debian, y sshd en AlmaLinux y Rocky. El usuario restringido entra en /files y no ve nada más.
Verificación
Prueba desde una terminal antes de culpar a FileZilla:
Bashsftp USER@VPS_IP sftp> pwd sftp> put test.txt sftp> ls -l
Después sube un archivo con FileZilla y comprueba su propietario con ls -l /var/www/example.com.
Solución de problemas
- Conexión rechazada o tiempo de espera agotado: comprueba que sshd está activo (
systemctl status ssh), que el puerto está abierto en el cortafuegos y que elegiste SFTP, no FTP. - Permission denied (publickey): la clave no está en
~/.ssh/authorized_keyso los permisos son incorrectos. Corrige conchmod 700 ~/.sshychmod 600 ~/.ssh/authorized_keys. - Usuario enjaulado desconectado justo al entrar: la carpeta chroot no pertenece a root o es escribible por el grupo. Busca «bad ownership or modes for chroot directory» en
journalctl -u ssh. - No se puede subir, permiso denegado en una carpeta: el usuario no es propietario del destino. Repite los comandos
chownychmoddel paso 4.
✅ Ya puedes mover archivos de forma segura a tu VPS Linux con FileZilla.