Introducción
SSH proporciona acceso cifrado mediante la línea de comandos a otra cuenta de Linux, mientras que SCP utiliza la misma autenticación y el mismo canal de transporte para copiar archivos. En una primera conexión segura se verifica la clave de host del servidor; en las conexiones posteriores se puede utilizar una clave personal en lugar de enviar repetidamente la contraseña de la cuenta.
En este laboratorio se utiliza la cuenta aislada remoteuser en localhost como host remoto. Aunque ambas cuentas comparten la misma máquina virtual de prácticas, el protocolo SSH, las solicitudes de autenticación, el directorio personal remoto y las transferencias de archivos funcionan como en un flujo de trabajo básico entre dos hosts. La ruta de acceso SSH predeterminada de labex no se modifica.
Inspeccionar el destino SSH
En este paso identificarás el cliente SSH, resolverás el nombre del destino, confirmarás que hay un servidor escuchando y consultarás su clave de host pública.
Accede al espacio de trabajo local:
cd /home/labex/project/ssh-lab
Muestra la versión del cliente OpenSSH. Este programa escribe su versión en la salida de error estándar, por lo que 2>&1 la combina con la salida estándar:
ssh -V 2>&1
Resuelve el destino local mediante la configuración de resolución de nombres del sistema:
getent hosts localhost
Confirma que hay un servidor SSH escuchando en el puerto TCP 22:
sudo ss -ltnp | grep ':22'
ssh-keyscan obtiene claves de host públicas sin iniciar sesión. Envía la clave ED25519 a ssh-keygen -lf - para mostrar su huella digital:
ssh-keyscan -t ed25519 localhost 2>/dev/null | ssh-keygen -lf -
En un entorno real, compara esta huella digital con un valor de confianza proporcionado por el administrador antes de aceptarla. Guarda un resumen compacto del destino:
printf 'target=localhost\nport=22\nuser=remoteuser\n' > ssh-target.txt
cat ssh-target.txt
Abrir el primer shell remoto
En este paso verificarás una clave de host, te autenticarás con una contraseña, inspeccionarás la cuenta remota y cerrarás el shell remoto.
Conéctate utilizando el formato user@host:
ssh remoteuser@localhost
Como la configuración eliminó cualquier registro anterior de la clave de host de localhost, SSH te preguntará si confías en la huella digital mostrada. Después de compararla con la del paso 1, escribe:
yes
Cuando aparezca la solicitud de contraseña, introduce:
RemoteLab123!
La contraseña no se mostrará mientras la escribes. Después de iniciar sesión, el indicador corresponde a remoteuser, no a labex. Confirma la identidad remota, el host y el directorio actual:
whoami
hostname
pwd
Crea un archivo indicador remoto en el directorio personal de la cuenta remota:
mkdir -p ~/ssh-lab
printf 'connected as %s\n' "$(whoami)" > ~/ssh-lab/connected.txt
Cierra el shell remoto y vuelve al indicador local de labex:
exit
El comando exit solo finaliza el shell remoto; el terminal local permanece abierto.
Ejecutar un comando remoto
En este paso ejecutarás comandos de forma remota sin abrir un shell interactivo permanente y guardarás localmente su salida.
Vuelve al espacio de trabajo local si es necesario:
cd /home/labex/project/ssh-lab
Coloca un comando entre comillas después del host. SSH lo ejecutará de forma remota y devolverá su salida al terminal local:
ssh remoteuser@localhost 'whoami; uname -srm; uptime'
Introduce RemoteLab123! cuando se solicite. Los puntos y coma separan los comandos que interpreta el shell remoto.
Ejecuta un segundo comando remoto y redirige la salida devuelta a un archivo local:
ssh remoteuser@localhost 'printf "remote_user=%s\nremote_home=%s\n" "$(whoami)" "$HOME"' > remote-context.txt
Introduce de nuevo la contraseña. La redirección > la gestiona el shell local, por lo que remote-context.txt se crea en el espacio de trabajo local:
cat remote-context.txt
El archivo debe identificar a remoteuser y /home/remoteuser.
Transferir un archivo con SCP
En este paso cargarás un archivo local, comprobarás su contenido de forma remota y lo descargarás con un nombre local nuevo.
Crea un ejemplo de configuración local:
cd /home/labex/project/ssh-lab
printf 'mode=training\nport=8080\n' > app.conf
SCP utiliza user@host:path para indicar una ruta remota. Carga el archivo en el directorio remoto incoming, que ya está preparado:
scp app.conf remoteuser@localhost:/home/remoteuser/incoming/app.conf
Introduce RemoteLab123! cuando se solicite. Confirma el contenido remoto mediante SSH:
ssh remoteuser@localhost 'cat /home/remoteuser/incoming/app.conf'
Introduce de nuevo la contraseña. Ahora invierte el origen y el destino para descargar el archivo:
scp remoteuser@localhost:/home/remoteuser/incoming/app.conf downloaded-app.conf
Introduce la contraseña y compara el original local con la copia descargada:
cmp app.conf downloaded-app.conf && echo "The files match"
Transferir un directorio de forma recursiva
En este paso utilizarás el modo recursivo de SCP para copiar un árbol de directorios a la cuenta remota.
Crea un pequeño árbol de proyecto local:
cd /home/labex/project/ssh-lab
mkdir -p site/assets
printf '<h1>SSH transfer practice</h1>\n' > site/index.html
printf 'body { color: navy; }\n' > site/assets/style.css
La opción -r copia los directorios y todo su contenido de forma recursiva:
scp -r site remoteuser@localhost:/home/remoteuser/incoming/
Introduce RemoteLab123! cuando se solicite. Muestra el árbol remoto mediante un comando SSH ejecutado de una sola vez:
ssh remoteuser@localhost 'find /home/remoteuser/incoming/site -type f -printf "%P\n" | sort'
Introduce de nuevo la contraseña. Deberías ver assets/style.css e index.html.
Generar una clave SSH personal
En este paso crearás un par de claves ED25519 específico para las prácticas y comprobarás sus permisos y su huella digital.
Un par de claves contiene una clave privada que permanece contigo y una clave pública que se puede instalar en una cuenta remota. Genera una clave específica para las prácticas sin frase de contraseña, de modo que la validación automatizada pueda utilizarla:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/labex_remote_ed25519 -N '' -C 'labex-remote-practice'
La opción -t selecciona el algoritmo, -f selecciona el archivo, -N '' establece una frase de contraseña vacía para las prácticas y -C añade una etiqueta. En entornos de producción, normalmente se recomienda utilizar una frase de contraseña segura cuando las restricciones de automatización no lo impidan.
Inspecciona los dos archivos y sus permisos:
ls -l ~/.ssh/labex_remote_ed25519 ~/.ssh/labex_remote_ed25519.pub
La clave privada solo debe poder ser leída por labex. El archivo .pub está diseñado para compartirse. Muestra la huella digital de la clave pública:
ssh-keygen -lf ~/.ssh/labex_remote_ed25519.pub
Nunca copies ni divulgues la clave privada.
Instalar y utilizar la clave pública
En este paso instalarás la clave pública para remoteuser, te conectarás sin que se solicite una contraseña y verificarás la transferencia de archivos basada en claves.
ssh-copy-id añade una clave pública a ~/.ssh/authorized_keys de la cuenta remota y establece los permisos adecuados:
ssh-copy-id -i ~/.ssh/labex_remote_ed25519.pub remoteuser@localhost
Introduce RemoteLab123! para esta última acción autenticada mediante contraseña. Prueba la clave privada específica con -i:
ssh -i ~/.ssh/labex_remote_ed25519 remoteuser@localhost 'printf "key authentication works\n" > ~/ssh-lab/key-authenticated.txt; cat ~/ssh-lab/key-authenticated.txt'
Este comando no debería solicitar la contraseña de la cuenta remota. Utiliza la misma identidad para SCP:
scp -i ~/.ssh/labex_remote_ed25519 remoteuser@localhost:~/ssh-lab/key-authenticated.txt key-authenticated.txt
cat key-authenticated.txt
El archivo descargado debe contener key authentication works. La clave de host autentica al servidor; tu clave privada te autentica ante la cuenta remota. Cada una resuelve un problema de confianza diferente.
Resumen
Verificaste una clave de host SSH, abriste y cerraste un shell remoto, ejecutaste comandos remotos de una sola vez y distinguíste entre la redirección local y la ejecución remota. También cargaste y descargaste archivos con SCP y copiaste un directorio de forma recursiva.
Además, generaste un par de claves ED25519 específico, protegiste la clave privada, instalaste únicamente la clave pública y reutilizaste esa identidad para SSH y SCP sin contraseña. Estas son las competencias fundamentales para una administración remota segura en entornos iniciales.



