Curso de Linux / Conectarse por SSH y transferir archivos con scp y sftp

SSH es un protocolo que permite iniciar sesión en un servidor remoto mediante una conexión cifrada y ejecutar comandos, y también se pueden transferir archivos con scp y sftp de OpenSSH. Al conectarse por primera vez, verifique la huella digital de la clave del host del servidor y no elimine los métodos de inicio de sesión existentes antes de que se verifique la autenticación por clave.

El modo de archivo de la clave privada se encuentra en permisos de archivo, y el tiempo de espera de conexión y el fallo en la verificación del nombre deben comprobarse junto con diagnóstico de red. En Ubuntu, no solo se comprueba el servicio SSH, sino también si el socket está activado systemctl status ssh.service ssh.socket. Esto no significa que ambas unidades deban estar siempre activas.

El estándar para la práctica de configuración del sistema es Ubuntu 26.04 LTS y VMs de instalación general de la serie Rocky Linux 9. En contenedores, WSL u otras versiones, la configuración de servicios y paquetes puede variar. Preparar primero la recuperación de consola y la verificación de la versión se indica en Crear un entorno de práctica con máquina virtual.

Distinguir entre cliente y servidor e instalarlos

El ordenador que introduce los comandos es el cliente, y el Linux al que se desea iniciar sesión es el servidor. El servidor necesita una dirección IP accesible, una cuenta de usuario real, sshd en ejecución y una política de red que permita el puerto correspondiente. Los siguientes comandos de instalación son para servidores Ubuntu y Rocky Linux respectivamente. Ejecute solo el conjunto que corresponda a su distribución, y el apt update de Ubuntu actualiza la lista de paquetes.

sudo apt update
sudo apt install openssh-server
sudo systemctl enable --now ssh
sudo dnf install openssh-server
sudo systemctl enable --now sshd

El nombre del servicio generalmente es ssh en Ubuntu y sshd en Rocky Linux, pero consulte la configuración real instalada para confirmarlo. El firewall, los grupos de seguridad de la nube y el reenvío de puertos NAT son independientes. Cuando se cambien los puertos SSH o se restrinja la autenticación en un servidor operativo, mantenga las conexiones existentes abiertas y asegure una ruta de recuperación desde la consola.

Verificar la identidad del servidor en la primera conexión

Verifique la huella digital de la clave pública del host desde una ruta ya confiable como la consola de administración del servidor. El primer comando se ejecuta en el servidor y el segundo en el cliente. Reemplace user y server.example con la cuenta y dirección reales. Si no hay clave de host Ed25519 o no está permitida por la política de cifrado correspondiente, el administrador debe verificar la clave de host que se utiliza realmente.

sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
ssh user@server.example

Compare la huella digital SHA256 mostrada por el cliente con la verificada en el servidor y luego apruébela. Si aparece una advertencia de que la clave del servidor existente ha cambiado, primero confirme si se trata de una reinstalación, reemplazo de clave o un posible ataque. No elimine todo known_hosts ni desactive la verificación de la clave del host para eliminar la advertencia. Solo administre el elemento si se confirma que el servidor ha sido reemplazado realmente.

Crear un par de claves y registrar solo la clave pública

Compruebe primero que existe ~/.ssh y que pertenece a su usuario. Si no existe, créelo con mkdir -m 700 ~/.ssh; si ya existe, revise sus permisos sin sustituir su contenido. Si el primer comando pregunta si desea sobrescribir un archivo existente, deténgase y elija otro nombre de archivo. Configure una frase de contraseña para proteger la clave privada y guárdela en el cliente, y registre solo la clave pública .pub en el servidor. En un cliente sin ssh-copy-id, agregue la línea de clave pública a ~/.ssh/authorized_keys de la cuenta de destino según el procedimiento de administración. Normalmente, en el servidor .ssh tiene permisos 700 y authorized_keys tiene permisos 600, y también se debe verificar el propietario.

ssh-keygen -t ed25519 -f ~/.ssh/linux-course-key
ssh-copy-id -i ~/.ssh/linux-course-key.pub user@server.example
ssh -i ~/.ssh/linux-course-key user@server.example

Compruebe la autenticación en una terminal nueva. El simple uso de -i no demuestra que se utilizó esa clave: puede haber otras identidades configuradas o una autenticación posterior por contraseña. Pruebe ssh -v -o PreferredAuthentications=publickey -o IdentitiesOnly=yes -i ~/.ssh/linux-course-key user@server.example y compruebe el método y la huella de la clave aceptada en la salida; sustituya cuenta y destino reales. En entornos con políticas criptográficas o FIPS (Federal Information Processing Standards), elija algoritmos que cumplan la política aplicada.

Enviar y recibir un archivo único con scp

Prepare una carpeta local de práctica nueva y compruebe que no existen transfer-test.txt ni transfer-returned.txt. Este ejemplo se ejecuta desde el cliente. Tenga cuidado, porque se puede sobrescribir un archivo con el mismo nombre en la carpeta home remota; utilice una cuenta de práctica y verifique que no exista el archivo antes de continuar. Si el último cmp termina sin salida y con estado 0, los contenidos de los dos archivos son idénticos. La versión reciente de scp de OpenSSH utiliza SFTP para la transferencia por defecto, por lo que la compatibilidad con servidores SCP antiguos debe comprobarse según la versión del servidor y del cliente.

printf "SSH transfer test\n" > transfer-test.txt
scp -i ~/.ssh/linux-course-key transfer-test.txt user@server.example:~/transfer-test.txt
scp -i ~/.ssh/linux-course-key user@server.example:~/transfer-test.txt ./transfer-returned.txt
cmp transfer-test.txt transfer-returned.txt

Usar sftp y puerto personalizado

sftp -i ~/.ssh/linux-course-key user@server.example

Dentro del prompt de sftp, introduzca los siguientes comandos. pwd·ls indican la ubicación remota, mientras que lpwd·lls muestran la ubicación local. Verificar la ubicación base de carga y descarga primero puede reducir el riesgo de guardar archivos en directorios incorrectos.

pwd
lpwd
ls
put transfer-test.txt
get transfer-test.txt transfer-sftp.txt
bye

Si el puerto es 2222, ssh utiliza -p 2222, y scp y sftp utilizan -P 2222. Si se rechaza la conexión, primero se deben verificar puerto, servicio y política; si falla la autenticación, se deben comprobar primero el nombre de usuario, la clave y los permisos. Los registros detallados ssh -v no muestran la clave privada en sí, pero pueden contener información de dirección, cuenta y ruta, por lo que se debe ocultar antes de compartir. Después de la práctica, se deben organizar solo los archivos creados y las claves públicas innecesarias registradas.

Documentación oficial