Acceso remoto y transferencia de archivos con SSH

LinuxBeginner
Practicar Ahora

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.