Descripción general de SSH
SSH opera en un modelo cliente-servidor, conectándose al servidor SSH a través de un cliente SSH. Utiliza el puerto 22 por defecto y protege las comunicaciones de amenazas como ataques de intermediarios o interceptaciones de datos mediante técnicas de encriptación robustas.
Principales funciones de SSH
SSH proporciona las siguientes funciones principales:
Funciones clave de SSH
- Ejecución remota de comandos: Puedes ejecutar comandos directamente en un servidor remoto.
- Transferencia segura de archivos: Puedes intercambiar archivos de forma segura a través de `scp` (Secure Copy) o `sftp` (SSH File Transfer Protocol).
- Reenvío de puertos (túnel): Crea un túnel encriptado entre puertos locales y remotos para acceder de forma segura a servicios específicos.
- Reenvío de X11: Permite ejecutar aplicaciones GUI del servidor remoto en tu PC local.
- Autenticación basada en clave SSH: Ofrece un método de autenticación más seguro y conveniente utilizando pares de claves públicas y privadas en lugar de contraseñas.
Comandos SSH principales
Aprende a conectarte a servidores remotos y realizar diversas tareas utilizando comandos SSH. Combina las opciones para aprovechar las funcionalidades que necesites.
1. Conexión y autenticación básicas
2. Funciones avanzadas y reenvío
Comando generado:
Combina los comandos.
Descripción:
`ssh` Ejecutando el comando.
Combina las opciones anteriores para ejecutar virtualmente los comandos junto con la IA.
Autenticación basada en clave SSH
La autenticación basada en clave SSH es un método mucho más seguro y conveniente que la autenticación por contraseña. Utiliza pares de claves públicas y privadas para la autenticación, lo que reduce el riesgo de exposición de contraseñas.
Generación de claves SSH
Utiliza el comando `ssh-keygen` para crear un par de claves públicas y privadas. Por defecto, se generan los archivos `~/.ssh/id_rsa` (clave privada) y `~/.ssh/id_rsa.pub` (clave pública).
Comando para generar claves SSH
ssh-keygen -t rsa -b 4096
Genera un nuevo par de claves SSH en el disco. Puedes establecer la ubicación y la contraseña para guardar las claves.
Distribución de la clave pública
La clave pública generada (`id_rsa.pub`) debe añadirse al archivo `~/.ssh/authorized_keys` en el directorio de inicio del usuario en el servidor remoto. Los usuarios que tengan su clave pública registrada en este archivo pueden acceder al servidor sin contraseña utilizando la clave privada.
Copiar clave pública al servidor (usando ssh-copy-id)
ssh-copy-id user@hostname
El comando `ssh-copy-id` permite copiar fácilmente la clave pública al servidor remoto. Es el método más recomendado.
Copiar clave pública manualmente (usando scp)
scp ~/.ssh/id_rsa.pub user@hostname:~/
ssh user@hostname "mkdir -p ~/.ssh && cat ~/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && rm ~/id_rsa.pub"
Si no puedes usar `ssh-copy-id`, puedes copiar el archivo de clave pública al servidor utilizando `scp` y luego añadirlo manualmente a `authorized_keys`.
Archivo de configuración SSH (~/.ssh/config)
El archivo de configuración SSH (`~/.ssh/config`) te permite guardar información de conexión de servidores a los que accedes con frecuencia, facilitando su uso. Puedes conectarte fácilmente con alias en lugar de ingresar opciones complejas cada vez.
Ejemplo de archivo de configuración
A continuación se muestra un ejemplo del archivo `~/.ssh/config`. Puedes definir configuraciones de conexión para múltiples hosts.
Contenido del archivo de configuración
Host myserver
HostName 192.168.1.100
User myuser
Port 2222
IdentityFile ~/.ssh/my_server_key.pem
Host dev-web
HostName dev.example.com
User webadmin
ForwardAgent yes
LocalForward 8080 localhost:80
Opciones de configuración clave
A continuación se presentan las principales opciones que se pueden usar en el archivo `config`.
- Host: Este es el alias de este bloque de configuración. Se utiliza como `ssh myserver`.
- HostName: Es la dirección IP o el nombre de dominio del host remoto al que realmente te conectarás.
- User: Es el nombre de usuario para conectarse al servidor remoto.
- Port: Es el número de puerto al que te conectarás.
- IdentityFile: Es la ruta del archivo de clave privada que se utilizará para la autenticación.
- LocalForward: Configura el reenvío de puertos locales. `LocalForward [local_port] [remote_host]:[remote_port]`
- RemoteForward: Configura el reenvío de puertos remotos. `RemoteForward [remote_port] [local_host]:[local_port]`
- ForwardAgent: Activa el reenvío del agente SSH. Es útil al conectar a través de múltiples servidores.
- ServerAliveInterval: Envía señales periódicas al servidor para evitar que la conexión SSH se interrumpa. (en segundos)
- StrictHostKeyChecking: Configura si se debe verificar la clave del host. `yes` o `no`
Conexión utilizando el archivo de configuración
ssh myserver
Si has definido un alias de Host llamado `myserver` en el archivo `~/.ssh/config`, puedes conectarte fácilmente de la siguiente manera.
Ejemplos de uso
Aprende sobre la administración de servidores remotos y la transferencia de archivos a través de diversos ejemplos de uso del comando SSH.
Conexión básica SSH
ssh testuser@192.168.1.100
Te conectas al servidor 192.168.1.100 con el nombre de usuario testuser. Aparecerá un mensaje solicitando la contraseña.
Conexión usando un archivo de clave SSH
ssh -i ~/.ssh/my_key.pem ubuntu@ec2-1-2-3-4.compute-1.amazonaws.com
Te conectas al servidor usando un archivo de clave privada `~/.ssh/my_key.pem` en lugar de una contraseña. (Comúnmente utilizado en entornos de nube)
Ejecutar un solo comando de forma remota
ssh user@hostname "ls -l /var/log"
Ejecuta el comando `ls -l /var/log` en el servidor remoto sin conectarte y trae el resultado a tu local.
Reenvío de puerto local (acceso a servicio web)
ssh -L 8888:localhost:80 user@hostname
Accedes al puerto 80 (servidor web) del servidor remoto a través del puerto 8888 de tu PC local. Puedes acceder como si el servidor web estuviera localmente en tu máquina.
Copiar archivo usando SCP (local -> remoto)
scp mylocalfile.txt user@hostname:/tmp/
Copia el archivo `mylocalfile.txt` de tu local al directorio `/tmp/` en el servidor remoto.
Copiar archivo usando SCP (remoto -> local)
scp user@hostname:/var/log/syslog .
Copia el archivo `/var/log/syslog` del servidor remoto al directorio actual en tu PC local.