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 transporte para copiar archivos. En una primera conexión segura se verifica la clave de host del servidor; en las conexiones posteriores puede utilizar una clave personal en lugar de enviar repetidamente la contraseña de la cuenta.
Este laboratorio utiliza una cuenta aislada remoteuser en localhost como host remoto. Aunque ambas cuentas comparten la misma máquina virtual de entrenamiento, el protocolo SSH, las solicitudes de autenticación, el directorio personal remoto y las transferencias de archivos funcionan como 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á el cliente SSH, resolverá el nombre del destino, confirmará que hay un servidor escuchando y consultará su clave pública de host.
Entre en el espacio de trabajo local:
cd /home/labex/project/ssh-lab
Muestre 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
Resuelva el destino local mediante la configuración del servicio de nombres del sistema:
getent hosts localhost
Confirme que un servidor SSH está escuchando en el puerto TCP 22:
sudo ss -ltnp | grep ':22'
ssh-keyscan recupera claves públicas de host sin iniciar sesión. Envíe 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, compare esta huella digital con un valor confiable proporcionado por el administrador antes de aceptarla. Guarde un resumen compacto del destino:
printf 'target=localhost\nport=22\nuser=remoteuser\n' > ssh-target.txt
cat ssh-target.txt
Abrir su primer shell remoto
En este paso, verificará una clave de host, se autenticará con una contraseña, inspeccionará la cuenta remota y cerrará el shell remoto.
Conéctese usando el formato user@host:
ssh remoteuser@localhost
Como la configuración eliminó cualquier registro anterior de la clave de host de localhost, SSH le preguntará si confía en la huella digital mostrada. Después de compararla con la del paso 1, escriba:
yes
Cuando aparezca la solicitud de contraseña, introduzca:
RemoteLab123!
La contraseña no se muestra mientras la escribe. Después de iniciar sesión, el prompt pertenece a remoteuser, no a labex. Confirme la identidad remota, el host y el directorio actual:
whoami
hostname
pwd
Cree un marcador remoto en el directorio personal de la cuenta remota:
mkdir -p ~/ssh-lab
printf 'connected as %s\n' "$(whoami)" > ~/ssh-lab/connected.txt
Cierre el shell remoto y vuelva al prompt local de labex:
exit
El comando exit termina únicamente el shell remoto; el terminal local permanece abierto.
Ejecutar un comando remoto
En este paso, ejecutará comandos de forma remota sin abrir un shell interactivo de larga duración y guardará localmente su salida.
Vuelva al espacio de trabajo local si es necesario:
cd /home/labex/project/ssh-lab
Coloque 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'
Introduzca RemoteLab123! cuando se le solicite. Los puntos y coma separan los comandos que interpreta el shell remoto.
Ejecute un segundo comando remoto y redirija la salida devuelta a un archivo local:
ssh remoteuser@localhost 'printf "remote_user=%s\nremote_home=%s\n" "$(whoami)" "$HOME"' > remote-context.txt
Introduzca 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á un archivo local, inspeccionará su contenido de forma remota y lo descargará con un nuevo nombre local.
Cree 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. Cargue el archivo en el directorio remoto incoming, que ya está preparado:
scp app.conf remoteuser@localhost:/home/remoteuser/incoming/app.conf
Introduzca RemoteLab123! cuando se le solicite. Confirme el contenido remoto mediante SSH:
ssh remoteuser@localhost 'cat /home/remoteuser/incoming/app.conf'
Introduzca de nuevo la contraseña. Ahora invierta el origen y el destino para descargar el archivo:
scp remoteuser@localhost:/home/remoteuser/incoming/app.conf downloaded-app.conf
Introduzca la contraseña y compare 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á el modo recursivo de SCP para copiar un árbol de directorios a la cuenta remota.
Cree 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 su contenido de forma recursiva:
scp -r site remoteuser@localhost:/home/remoteuser/incoming/
Introduzca RemoteLab123! cuando se le solicite. Enumere el árbol remoto con un comando SSH de una sola ejecución:
ssh remoteuser@localhost 'find /home/remoteuser/incoming/site -type f -printf "%P\n" | sort'
Introduzca de nuevo la contraseña. Debería ver assets/style.css e index.html.
Generar una clave SSH personal
En este paso, creará un par de claves ED25519 exclusivo e inspeccionará sus permisos y su huella digital.
Un par de claves contiene una clave privada que debe permanecer con usted y una clave pública que puede instalarse en una cuenta remota. Genere una clave exclusiva para practicar, 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 de práctica vacía y -C añade una etiqueta. En las claves de producción normalmente debe utilizar una frase de contraseña segura cuando las restricciones de automatización no lo impidan.
Inspeccione los dos archivos y sus permisos:
ls -l ~/.ssh/labex_remote_ed25519 ~/.ssh/labex_remote_ed25519.pub
La clave privada solo debe poder leerla labex. El archivo .pub está diseñado para compartirse. Muestre la huella digital de la clave pública:
ssh-keygen -lf ~/.ssh/labex_remote_ed25519.pub
Nunca copie ni divulgue la clave privada.
Instalar y utilizar la clave pública
En este paso, instalará la clave pública para remoteuser, se conectará sin una solicitud de contraseña y verificará una 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
Introduzca RemoteLab123! para esta última acción autenticada mediante contraseña. Pruebe la clave privada exclusiva 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. Utilice 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; su clave privada le autentica a usted ante la cuenta remota. Cada una resuelve un problema de confianza diferente.
Resumen
Verificó una clave de host SSH, abrió y cerró un shell remoto, ejecutó comandos remotos de una sola ejecución y distinguió la redirección local de la ejecución remota. También cargó y descargó archivos con SCP y copió un directorio de forma recursiva.
Además, generó un par de claves ED25519 exclusivo, protegió la clave privada, instaló únicamente la clave pública y reutilizó la identidad para SSH y SCP sin contraseña. Estas son las habilidades fundamentales para realizar una administración remota segura como principiante.



