SSH y transferencia segura de archivos
🎯 Objetivo del módulo Acceder a equipos remotos, ejecutar comandos y transferir archivos mediante conexiones cifradas, entendiendo la autenticación y la verificación del servidor.
1. Conexión básica con SSH #
1ssh usuario@servidor 2ssh -p 2222 usuario@servidor
SSH cifra la comunicación entre cliente y servidor. El puerto predeterminado es el 22, aunque puede configurarse otro.
Ejecuta un único comando remoto:
1ssh usuario@servidor 'uname -a'
Para diagnosticar la conexión:
1ssh -v usuario@servidor
No publiques contraseñas, claves privadas ni salidas de depuración con datos sensibles.
2. Identidad del servidor #
En la primera conexión, SSH muestra la huella de la clave del servidor. Verifícala por un canal fiable antes de aceptarla.
Las identidades conocidas se guardan normalmente en:
1~/.ssh/known_hosts
Si la clave de un servidor cambia inesperadamente, investiga la causa. No desactives la comprobación para ocultar el aviso: podría indicar una reinstalación legítima, una dirección reutilizada o un ataque de intermediario.
3. Autenticación con claves #
Genera una clave Ed25519 con una frase de paso:
1ssh-keygen -t ed25519 -C 'equipo-personal'
Se crean normalmente:
1~/.ssh/id_ed25519 # clave privada 2~/.ssh/id_ed25519.pub # clave pública
La clave privada no se comparte. La clave pública se añade al servidor remoto.
Si ssh-copy-id está disponible:
1ssh-copy-id usuario@servidor
La clave autorizada termina normalmente en:
1~/.ssh/authorized_keys
Permisos habituales:
1chmod 700 ~/.ssh 2chmod 600 ~/.ssh/authorized_keys 3chmod 600 ~/.ssh/id_ed25519
4. Configuración del cliente #
~/.ssh/config permite crear alias y evitar repetir opciones:
1Host produccion 2 HostName servidor.example.com 3 User deploy 4 Port 2222 5 IdentityFile ~/.ssh/id_ed25519
Después basta con:
1ssh produccion
Protege el archivo de configuración:
1chmod 600 ~/.ssh/config
5. Copiar con scp #
Del equipo local al remoto #
1scp informe.pdf usuario@servidor:/home/usuario/
Del remoto al local #
1scp usuario@servidor:/var/log/app.log ./
Directorio completo #
1scp -r sitio/ usuario@servidor:/srv/
La sintaxis es cómoda para copias puntuales. En OpenSSH moderno, scp utiliza SFTP de forma predeterminada, aunque conserva una interfaz similar al comando histórico.
6. Sesión interactiva con sftp #
1sftp usuario@servidor
Comandos habituales dentro de la sesión:
1pwd ruta remota 2lpwd ruta local 3ls listar remoto 4lls listar local 5get file descargar 6put file subir 7exit salir
7. Sincronización con rsync #
rsync transfiere diferencias y conserva atributos según las opciones. Puede no venir instalado.
1rsync -av --dry-run sitio/ usuario@servidor:/srv/sitio/ 2rsync -av sitio/ usuario@servidor:/srv/sitio/
--dry-run muestra qué ocurriría sin copiar. La barra final importa:
sitio/representa el contenido del directorio.sitiorepresenta el directorio como elemento.
No añadas --delete hasta comprender y revisar exactamente qué archivos eliminaría en el destino.
8. Agente de autenticación #
ssh-agent puede mantener claves desbloqueadas durante una sesión:
1ssh-add ~/.ssh/id_ed25519 2ssh-add -l
Evita reenviar el agente (ssh -A) sin una necesidad clara: un servidor remoto comprometido podría usar el agente para autenticarse mientras la conexión esté disponible.
9. Errores comunes #
- Compartir la clave privada en lugar de la pública.
- Aceptar una huella de servidor sin verificarla.
- Usar permisos demasiado abiertos en
~/.ssh. - Confundir rutas locales y remotas en
scp. - Ejecutar
rsync --deletesin--dry-run. - Desactivar controles de seguridad para ocultar un error de conexión.
Resumen del tema
Usa SSH para sesiones y comandos remotos, protege la clave privada, verifica la huella del servidor y prueba las sincronizaciones con rsync --dry-run antes de aplicar cambios.