GNU/Linux >> Tutoriales Linux >  >> Linux

Las 10 características principales de SSH que DEBE conocer para ser más productivo

Este artículo continúa nuestra serie de artículos de Linux y cubre muchas características y trucos útiles de SSH para mejorar su productividad diaria. Nuestras imágenes lo ayudarán a comprender la configuración de SSH, la administración de archivos de configuración, la autenticación, el trabajo con múltiples claves SSH y, por supuesto, el reenvío de puertos locales y remotos de SSH. ¡Conviértete en un maestro SSH en 10 minutos!

Qué es SSH

Secure Shell, o SSH, es un protocolo de red que le permite conectarse de forma segura a un servidor remoto y usar una interfaz de consola para administrarlo.

Cuando establece una conexión SSH, el servidor inicia una sesión de shell por usted. Después de eso, puede escribir los comandos en su cliente SSH y se ejecutarán en un servidor remoto.

Los administradores de sistemas usan este protocolo para conectarse y administrar servidores Linux remotos de forma segura.

Cómo funciona SSH

Como cualquier aplicación de red, SSH utiliza dos componentes:

  • Cliente SSH es una aplicación que instala en la computadora que usará para conectarse a la computadora basada en Linux de la red. El cliente SSH establece una conexión cifrada entre su computadora y el servidor remoto.
  • Servidor SSH es una aplicación de servidor que escucha en el puerto TCP/IP 22 para las conexiones del cliente. Si el cliente proporcionó las credenciales correctas, el servidor SSH crea una nueva sesión de usuario y le permite ejecutar comandos remotos.

Autenticación SSH

SSH le permite utilizar múltiples métodos de autenticación diferentes. Los más utilizados son:

  • Autenticación de contraseña – se le solicita el nombre de usuario y la contraseña para acceder al host remoto.
  • Autenticación basada en clave SSH – está utilizando claves públicas y privadas SSH para la autenticación de usuarios.

Autenticación basada en clave SSH

Este método de autenticación se considera más seguro que el uso de contraseñas. Así es como funciona:

Algoritmo de autenticación basado en clave SSH:

  • El cliente inicia la conexión SSH.
  • El servidor devuelve un mensaje aleatorio.
  • El cliente encripta el mensaje recibido usando una clave SSH privada y lo envía de vuelta al servidor.
  • El servidor descifra el mensaje del cliente usando una clave SSH pública . Si el mensaje es el mismo, el servidor otorga acceso.

El uso de la autenticación de contraseña en SSH no es seguro. Si aún usa la autenticación con contraseña, debe cambiarla a autenticación basada en clave SSH lo antes posible.

Cómo instalar un cliente SSH

En la mayoría de los sistemas Linux y macOS, el servidor SSH ya está instalado y disponible para usted de forma predeterminada. Pero si está jugando con Linux en su máquina virtual, es posible que deba instalarlo.

Ubuntu

Para las distribuciones de Linux basadas en deb, puede instalar el cliente SSH usando los siguientes comandos:

sudo apt-get update
sudo apt-get -y install openssh-client

CentOS, Fedora, RedHat

Para las distribuciones de Linux basadas en yum, puede instalar el cliente SSH usando los siguientes comandos:

sudo yum -y install openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd

Windows

Para el sistema operativo Windows, PuTTY se convirtió en un cliente SSH estándar de facto. Para instalarlo, descargue el instalador MSI desde el enlace anterior y siga las instrucciones de Cómo instalar PuTTY en Windows.

Aquí está la forma automatizada usando Chocolatey. Abra la consola de PowerShell en modo "Ejecutar como administrador") y ejecute los siguientes comandos:

Set-ExecutionPolicy RemoteSigned

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

choco install putty -y

Cómo instalar un servidor SSH

En la mayoría de los sistemas Linux y macOS, el cliente SSH ya está instalado y disponible de forma predeterminada. Pero si está jugando con Linux en su máquina virtual, es posible que deba instalarlo.

Servidor SSH – Ubuntu

Para las distribuciones de Linux basadas en deb, puede instalar el cliente SSH usando los siguientes comandos:

sudo apt-get update
sudo apt-get -y install openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd

Servidor SSH:CentOS, Fedora, RedHat

Para las distribuciones de Linux basadas en yum, puede instalar el cliente SSH usando los siguientes comandos:

sudo yum -y install openssh
sudo systemctl enable sshd
sudo systemctl start sshd

Servidor SSH – Windows

El servidor SSH no se puede instalar en Windows. En el mundo de Windows, debe usar Escritorio remoto y WinRM para controlar los servidores remotos de Windows.

Crear clave SSH

Tan pronto como tenga el cliente SSH, puede crear claves SSH públicas y privadas para la autenticación basada en claves SSH. Para crear una clave SSH, ejecute el siguiente comando en la terminal:

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Este comando creará un par de claves RSA de 4 Kb:

  • ~/.ssh/id_rsa – Clave privada SSH.
  • ~/.ssh/id_rsa.pub – Clave pública SSH.

Importante: El archivo de clave privada SSH nunca debe mostrarse ni enviarse a nadie.

Configurar autenticación basada en clave SSH

Para configurar la autenticación basada en clave SSH en el servidor, debe completar los siguientes pasos:

  • Inicie sesión en el servidor.
  • Ir al directorio de inicio del usuario.
  • Editar archivo ~/.ssh/authorized_keys y pega el contenido de la clave pública archivo allí.
  • Guardar cambios.

~/.ssh/autorizadas_claves puede contener tantos registros de archivos de clave pública como necesite. Por lo tanto, muchas personas diferentes pueden conectarse al servidor utilizando el mismo nombre de inicio de sesión pero sus archivos de clave privada.

Cómo conectarse usando SSH

Puede conectarse a un servidor Linux remoto utilizando un cliente SSH escribiendo el siguiente comando:

ssh remote_username@host_ip_address

Usar diferentes claves SSH para diferentes servidores

Es una situación generalizada en la que es posible que necesite usar diferentes archivos de claves SSH privadas para acceder a diferentes servidores. Hay varias formas de hacerlo.

Especifique la clave SSH en el comando de conexión

Para especificar una clave privada requerida como parte del comando de conexión SSH, use -i bandera:

ssh -i ~/.ssh/another_private_key remote_username@host_ip_address

Usar un agente SSH

Si no tiene demasiadas claves privadas, puede usar un agente SSH.

SSH Agent es un programa que carga su clave SSH privada en la memoria y la usa para pasar la autenticación SSH.

Linux

Inicie el agente ssh en segundo plano:

eval "$(ssh-agent -s)"

Para agregar sus claves SSH al agente, use los siguientes comandos:

ssh-add -K ~/.ssh/id_rsa
ssh-add -K ~/.ssh/another_private_key

Ventanas

La distribución PuTTY contiene Pagent, que se encuentra en la bandeja del sistema y desempeña el mismo papel. Haz clic derecho en Pagent y agrega tu clave SSH.

Ahora, el cliente SSH usará todas las claves privadas cargadas una por una para pasar la autenticación durante la conexión SSH.

Archivo de configuración SSH

Otra forma útil de configurar los parámetros del cliente SSH es a través de ~/.ssh/config archivo.

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
Host exceptional.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/another_private_key

En el ejemplo anterior, estamos usando el predeterminado ~/.ssh/id_rsa archivo de clave privada para todos los servidores, excepto exceptional.com servidor. Para exceptional.com servidor, usaremos ~/.ssh/another_private_key archivo.

Agente SSH y reenvío de claves

Otra característica favorita de SSH que uso a diario es el reenvío de claves SSH. Le permite usar sus claves SSH locales para conectarse a diferentes servidores.

Puede habilitar el reenvío de claves SSH durante la ejecución del cliente SSH especificando -T bandera:

ssh -T remote_username@host_ip_address

O puede habilitar permanentemente esta configuración en su ~/.ssh/config archivo especificando ForwardAgent yes :

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
  ForwardAgent yes

Reenvío de puertos SSH

El protocolo SSH le permite reenviar no solo la comunicación del Agente SSH a través de un canal SSH seguro, sino también cualquier tráfico TCP.

Si necesita reenviar tráfico UDP, use nc en combinación con SSH.

Hay dos tipos de opciones de reenvío de puertos.

Reenvío de puerto local

La mejor manera de explicar el reenvío de puerto local SSH es observando el siguiente diagrama.

En este diagrama, el Jump Host El servidor tiene conectividad privada con el servidor PostgreSQL de Amazon RDS.

El cliente el portátil puede conectarse al servidor Jump Host utilizando el protocolo SSH.

El propietario del cliente el portátil está buscando una forma de conectarse a la instancia de Amazon RDS .

La función de reenvío de puerto local SSH permite vincular un puerto en el cliente ordenador portátil. El tráfico del puerto enlazado se reenvía a través del Jump Host servidor a una instancia de Amazon RDS .

Como resultado, debe conectarse a la instancia de RDS desde el cliente computadora portátil, debe configurar pgsql en la computadora portátil para conectarse a localhost:15432 .

Así es como debe establecer una conexión SSH con el Jump Host desde el cliente de Linux o macOS portátil:

ssh -L 127.0.0.1:15432:rds-endpoint-url:5432 ec2-user@jump_host_ip

Si usa PuTTY, debe realizar cambios en Conexiones – SSH – Túneles antes de conectarse al Jump Host.

Reenvío de puerto remoto

El reenvío de puertos remotos SSH es una característica un poco más emocionante que resuelve el problema opuesto. Le permite vincular el puerto en el servidor ssh remoto y reenviar el tráfico que llega a ese puerto a las redes detrás del host del cliente SSH.

He aquí un ejemplo.

En nuestro ejemplo, tenemos un servidor aislado , que no tiene acceso a Internet, y el cliente portátil, que estamos usando para conectarnos al Jump Host .

Tráfico entre Jump HostServidor aislado no está restringido.

Necesitamos permitir el servidor aislado para conectarse a Internet. ¿Cómo podemos hacer eso?

Por ejemplo, podemos lanzar un contenedor Docker con el proxy Squid en la computadora portátil del cliente en el puerto 8080. Luego, podemos conectarnos a Jump Host utilizando SSH. La función de reenvío de puerto remoto es vincular el puerto 8081 en el Jump Host para reenviar el tráfico al cliente puerto de portátil 8080 .

Como resultado, el servidor aislado podrá usar http://jump_host_ip:8081 como servidor proxy.

Para habilitar el reenvío de puertos remotos durante la conexión SSH en Linux o macOS:

ssh -R 8081:localhost:8080 ec2-user@jump_host_ip

Para hosts PuTTY y Windows:

Resumen

En este artículo, cubrí muchas características útiles de SSH, que uso en mi trabajo diario. Espero que tú también empieces a usarlos. Si algo no está claro, comuníquese conmigo en la sección de comentarios a continuación. Estaré más que feliz de ayudar.

Si este artículo te resultó útil, ¡no dudes en ayudarme a difundirlo por todo el mundo!


Linux
  1. ¿Qué es el alojamiento VPS? Todo lo que necesita saber sobre los servidores privados virtuales

  2. 20 ejemplos de comandos OpenSSL que debes conocer

  3. [Linux]:¡Las 12 principales funciones de seguridad para habilitar en el servidor SSH!

  4. Servidor Ubuntu Lo que necesita saber

  5. ¿Puedes tener más de un archivo ~/.ssh/config?

20 cosas esenciales que debe saber si está en el servidor web Nginx

Todo lo que necesita saber sobre el servidor Linux Ubuntu

Todo lo que necesita saber sobre el servidor Linux OpenSSH

CentOS vs Ubuntu:debe conocer estos 15 hechos fundamentales

Los más de 50 comandos principales de Linux que DEBE conocer

Los 10 mejores muelles de Linux que DEBES probar en 2020