El protocolo SSH (Secure Shell) es un protocolo de red para la gestión remota de sistemas operativos mediante línea de comandos. Es ampliamente considerado el estándar para el acceso remoto a máquinas *nix. Permite iniciar sesión de forma segura en un servidor, ejecutar comandos de forma remota, gestionar archivos (crear, eliminar, copiar, etc.) y mucho más. La mayoría de los proveedores de nube y alojamiento requieren SSH para acceder a sus servicios. En este artículo veremos cómo copiar archivos a través de SSH en sistemas Windows y Linux.
SSH puede transmitir de forma segura cualquier tipo de datos (audio, vídeo, datos de protocolos de aplicación) a través de un canal de comunicación cifrado. A diferencia de protocolos obsoletos e inseguros como Telnet y rlogin, SSH garantiza la confidencialidad y la autenticidad de los datos — fundamentales para la comunicación en Internet.
Así es como se establece una conexión segura entre cliente y servidor:
Establecimiento de conexión TCP: Por defecto, el servidor escucha en el puerto 22. Ambas partes comparten una lista de algoritmos compatibles (compresión, cifrado, intercambio de claves) y acuerdan cuáles utilizar.
Autenticación: Para evitar la suplantación de identidad, ambas partes verifican sus identidades utilizando cifrado asimétrico (pares de claves pública/privada). Primero se autentica el servidor. En la primera conexión, el cliente muestra una advertencia con los detalles del servidor. Las claves de servidores de confianza se almacenan en /home/<username>/.ssh/known_hosts.
Generación de clave: Una vez verificado el servidor, ambas partes generan una clave simétrica para cifrar todos los datos intercambiados.
Autenticación del usuario: Se realiza mediante contraseña o una clave pública enviada por el cliente, almacenada en el servidor en /home/<username>/.ssh/authorized_keys.
La implementación más popular en Linux es OpenSSH, que viene preinstalada en la mayoría de las distribuciones (Ubuntu, Debian, RHEL, etc.). En Windows se utilizan clientes como PuTTY o MobaXterm. Desde Windows 10 y Server 2019, las herramientas OpenSSH también están disponibles de forma nativa.
Dos utilidades principales para copiar archivos en Linux son scp y sftp. Ambas vienen con OpenSSH.
SSH admite dos versiones de protocolo: 1 y 2. OpenSSH admite ambas, aunque la versión 1 se utiliza rara vez.
Para activar el autocompletado con la tecla Tab al usar scp, configura la autenticación por clave pública:
Generar un par de claves:
ssh-keygen
Salida esperada:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Por defecto, las claves (id_rsa para privada y id_rsa.pub para pública) se guardan en ~/.ssh/.
Copiar la clave pública al servidor remoto:
ssh-copy-id [username]@[ip-address]
Copiar la clave pública al servidor remoto:
Para transferencias pequeñas (por ejemplo, configuraciones de servicios), scp es ideal.
Copiar de local a remoto:
scp test.txt user@192.168.1.29:/home/user/
Copiar múltiples archivos:
scp test1.txt test2.txt user@192.168.1.29:/home/user/
Copiar múltiples archivos:
scp user@192.168.1.29:/home/user/test.txt ~/
Copiar directorios:
scp -r testdir user@192.168.1.29:/home/user/
Copiar de remoto a remoto:
scp gendo@192.168.1.25:/home/gendo/test.txt user@192.168.1.29:/home/user/
SFTP es otra utilidad incluida en OpenSSH. Desde OpenSSH 9.0, scp utiliza SFTP por defecto en lugar del antiguo protocolo SCP/RCP.
A diferencia de FTP clásico, sftp transmite datos cifrados a través de un túnel seguro. No requiere un servidor FTP separado.
Ejemplo de uso:
sftp misato@192.168.1.29
sftp> ls
sftp> lcd testdir/
sftp> get test.txt
sftp> bye
Gestores de archivos gráficos como Midnight Commander y Nautilus también usan sftp. En Nautilus, el servidor remoto aparece como una carpeta local, por ejemplo user@ip.

En Windows, se utiliza la herramienta de línea de comandos pscp de PuTTY para copiar archivos.
Copiar al servidor:
pscp C:\server\test.txt misato@192.168.1.29:/home/misato/
Copiar desde el servidor:
pscp misato@192.168.1.29:/home/misato/test.txt C:\file.txt
Listar archivos en el servidor remoto:
pscp -ls user@192.168.1.29:/home/misato
Usar comillas para rutas con espacios:
pscp "C:\dir\bad file name.txt" misato@192.168.1.29:/home/misato/
Ver ayuda:
pscp
Hemos visto cómo copiar archivos desde y hacia un servidor usando el protocolo seguro SSH. Si trabajas con servidores en la nube, entender SSH es esencial: es el método estándar para el acceso remoto a máquinas *nix y una parte fundamental del trabajo diario en DevOps y administración de sistemas.