Conexión remota por SSH

Protocolo SSH: ¿Qué es Secure Shell y cómo funciona?

Hola, bienvenido a EWebik, hoy te explicaré el Protocolo SSH (Secure Shell), te enseñaré ¿Qué es SSH y cómo funciona? Además veremos un par de ejemplos de como puedes crear las llaves que utilizarás para conectarte de forma remota a un servidor a través de este protocolo.

Tenemos varios cursos esperando por ti, así que vuela a verlos para seguir aprendiendo:

Protocolo SSH: ¿Qué es Secure Shell y cómo funciona?

by Juan Carlos García

6-Nov-2023

(2)

Suscribirme al canal:

Protocolo SSH: ¿Qué es Secure Shell y cómo funciona?

¿Qué es el protocolo SSH (Secure Shell)?

El protocolo SSH (Secure Shell) es un protocolo de red seguro, mediante el cual podemos conectarnos y administrar dispositivos remotos a través de una red. Fue diseñado originalmente como una alternativa segura a Telnet y otros protocolos no seguros.

SSH es ampliamente utilizado para administrar servidores, routers, switches, computadoras y otros dispositivos en todo el mundo.

¿Cómo funciona el protocolo SSH?

El protocolo SSH funciona mediante la creación de una conexión encriptada entre el cliente y el servidor. El servidor SSH escucha en un puerto específico (por defecto el puerto 22) y acepta conexiones de clientes SSH.

Una vez que el cliente y el servidor han establecido una conexión, pueden comunicarse de forma segura mediante la transmisión de datos encriptados, además de la seguridad, otro aspecto importante del protocolo SSH es su flexibilidad.

SSH permite a los usuarios conectarse a un servidor remoto y ejecutar comandos, transferir archivos y ejecutar aplicaciones remotas. Esto es útil para administrar servidores y dispositivos remotos, realizar copias de seguridad, automatizar tareas y mucho más.

El protocolo SSH se basa en varios componentes clave, incluidos la autenticación, la encriptación y la compresión. Para autenticarse, los usuarios deben proporcionar su:

  • Nombre de usuario y contraseña.
  • O utilizar una clave pública / privada para autenticarse con el servidor.

La encriptación se realiza mediante el uso de cifrado simétrico y asimétrico, lo que garantiza que los datos transmitidos sean seguros y no legibles por terceros. La compresión se utiliza para reducir el tamaño de los datos y mejorar la velocidad de transmisión.

Características principales del protocolo SSH

Dentro de las principales características con las que cuenta Secure Shell son:

Cifrado

  • SSH proporciona una conexión segura a través de la cifrado de los datos enviados entre el cliente y el servidor.

Autenticación

  • SSH permite autenticar a los usuarios mediante contraseñas o claves públicas y privadas.

Redirección de puertos

  • SSH permite la redirección de puertos, lo que significa que puede redirigir la comunicación de un puerto en el servidor a un puerto en su computadora local.

X11 Forwarding

  • SSH permite la visualización de aplicaciones gráficas de un servidor remoto en nuestra computadora local.

Comandos remotos

  • SSH permite la ejecución de comandos remotos en un servidor.

Comprimir datos

  • SSH permite comprimir los datos antes de ser enviados, lo que puede acelerar la transferencia de datos.

Integridad de datos

  • SSH garantiza la integridad de los datos transferidos mediante la verificación de errores y la autenticación de los datos.

Interoperabilidad

  • SSH es compatible con una amplia variedad de sistemas operativos y plataformas, lo que lo hace fácil de usar en una amplia variedad de entornos.

Estas son solo algunas de las características más importantes de SSH, lo que indica que es una herramienta versátil y muy utilizada, ya que ofrece una gran cantidad de funciones adicionales para mejorar la seguridad y la facilidad de uso en entornos de red remotos.

¿Cómo habilitar el protocolo SSH en un servidor Ubuntu?

Bien, para que puedas practicar y poner en práctica toda la teoría anterior, veamos como puedes habilitar el protocolo SSH en un servidor Linux, en este caso Ubuntu.

  • Inicia sesión en tu servidor: Puedes hacerlo a través de una terminal en la consola o mediante un cliente SSH.
  • Verifica si OpenSSH está instalado: Para hacerlo, ejecuta el siguiente comando en la terminal:
$ sudo apt-get update
$ sudo apt-get install openssh-server
  • Verifica que el servicio SSH esté corriendo: Para verificar que el servicio SSH esté corriendo, ejecuta el siguiente comando:
$ sudo service ssh status
  • Si el servicio está corriendo, deberías ver un mensaje que indique "active (running)".
  • Archivo de configuración de SSH: Puedes configurar el archivo de configuración de SSH en el archivo /etc/ssh/sshd_config. Abre este archivo con un editor de texto y verifica las siguientes líneas:
Port 22
PermitRootLogin yes
PasswordAuthentication yes
  • Recuerda que el puerto que elijas lo debes agregar al firewall, ya que de lo contrario, no podrás conectarte al servidor, para abrir el puerto lo puedes hacer de la siguiente manera:
sudo ufw allow 22
  • Si el firewall no se encuentra activo, tendrás que habilitarlo previamente.
  • Reinicia el servicio SSH: Para aplicar los cambios en el archivo de configuración, reinicia el servicio SSH con el siguiente comando:
$ sudo service ssh restart
  1. Conéctate a través de SSH: Finalmente, puedes conectarte a tu servidor a través de SSH desde un cliente externo. Por ejemplo, si quieres conectarte desde la terminal de comandos en una máquina local, ejecuta el siguiente comando:
$ ssh usuario@direccion-IP-del-servidor
  • Ingresa la contraseña de tu usuario y deberías tener acceso a tu servidor Ubuntu a través de SSH.

Estos son los pasos básicos para habilitar SSH en un servidor Ubuntu. Hay muchas otras configuraciones y opciones que puedes explorar para ajustar la seguridad y el rendimiento de tu servidor SSH.

  • Puede negar el acceso Root.
  • Cambiar el puerto de conexión.
  • Etc.

¿Cómo crear las llaves públicas y privadas para la conexión a través del protocolo SSH?

El proceso es relativamente sencillo, lo puedes hacer todo desde la línea de comandos, ya sea en Windows, Linux o Mac. A continuación tienes un ejemplo:

  • Abre la terminal de comando y escribe el siguiente comando para generar una nueva clave SSH:
ssh-keygen -t rsa
  • Siga las instrucciones en pantalla para guardar la clave en una ubicación específica, en mi caso he creado una carpeta de nombre “ssh” en el escritorio.
  • Asegúrate de recordar la contraseña que se establece para la clave privada.
  • Copia la clave pública a un servidor remoto:
ssh-copy-id usuario@servidor.com
  • Conéctate al servidor remoto mediante SSH:
ssh usuario@servidor.com
  • Ingresa la contraseña de la clave privada cuando te la solicite. Ahora estás conectado a través de SSH al servidor remoto y puedes ejecutar comandos en él.

Este es un ejemplo básico de cómo usar claves SSH para conectarse a un servidor remoto desde la terminal de comando. Hay muchas otras opciones y configuraciones disponibles para las claves SSH, pero este proceso es un punto de partida para aquellos que estén comenzando a trabajar con SSH.

Instalación de Git Bash en Windows

Ahora, si no tienes una herramienta instalada para generar las llaves que te mencione anteriormente, puedes utilizar Putty o Git Bash en Windows, en este caso, te enseñaré a utilizar e instalar Git Bash:

  • Descarga Git Bash: Puedes descargar Git Bash desde el sitio web oficial de Git.
  • Ejecuta el archivo de instalación: Haz clic en el archivo de instalación descargado y siga las instrucciones en el asistente de instalación. Asegúrate de seleccionar la opción de "Git Bash" para tener acceso a la terminal de Git en la ventana de comandos.
  • Configura tu perfil de usuario: Después de la instalación, puedes abrir Git Bash y configurar tu perfil de usuario. Para hacerlo, escribe los siguientes comandos en la terminal:
$ git config --global user.name "Tu Nombre"
$ git config --global user.email "tu-email@ejemplo.com"
  • Verifica la instalación: Para verificar que la instalación de Git Bash se haya completado correctamente, puedes escribir el siguiente comando en la terminal:
$ git --version

Deberías ver la versión de Git que se instaló en tu sistema. Con estos pasos, ya estás listo para empezar a usar Git Bash en Windows.

Crear llaves con Git Bash

  • Para generar las llaves, abra la herramienta Git Bash y escriba el siguiente comando:
ssh-keygen

Presione "Enter" para aceptar el directorio predeterminado y luego ingrese una contraseña para proteger la clave privada. Ahora sigue los pasos anteriores para conectarte a un servidor remoto.

  • Copiar la clave pública: La clave pública se guarda en el archivo "id_rsa.pub" en su directorio de usuario. Copie el contenido de ese archivo en su portapapeles.
  • Agregar la clave pública al servidor remoto: Conéctese al servidor remoto utilizando cualquier método de acceso remoto (por ejemplo, PuTTY) y agregue la clave pública al archivo "~/.ssh/authorized_keys" en el servidor remoto.
    • Muchos servidores al ser creados permiten agregar la llave pública o cuentan con otras opciones de conexión que nos permiten configurarlo.
    • EWebik tiene un cupón para Digital Ocean que te da 100 dólares de crédito durante 60 días para que pruebes su servicios, uno de los mejores para alojar tus aplicaciones y proyectos. 👇👇👇
  • Conectarse al servidor remoto: Abra Git Bash y escriba el siguiente comando para conectarse al servidor remoto:
ssh username@remote_server_ip

Ingrese la contraseña de su cuenta en el servidor remoto cuando se le solicite y luego ingrese la contraseña de la clave privada cuando se le solicite. Si todo está configurado correctamente, debería conectarse sin problemas al servidor remoto.

Programas y software cliente servidor para SSH

Hay muchos programas cliente y servidor SSH disponibles, incluidos:

  • OpenSSH
  • Putty
  • WinSCP y muchos otros.

Estos programas permiten a los usuarios conectarse y administrar dispositivos remotos de forma segura. Además, muchos sistemas operativos, como Linux y macOS, incluyen un cliente SSH integrado, lo que lo hace aún más accesible y fácil de usar.

Conexión SSH a través de C#

Así como hay softwares dedicados para el protocolo SSH, puedes crear tu propio código y adecuarlo, no se que tan recomendable sea, pero te dejo un ejemplo de cómo puedes hacerlo en .NET C#.

using Renci.SshNet;

namespace SSHExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Inicializa las credenciales de inicio de sesión
            string host = "example.com";
            string username = "username";
            string password = "password";
            
            // Inicializa una nueva conexión SSH
            using (var client = new SshClient(host, username, password))
            {
                client.Connect();
                
                // Ejecuta un comando en el servidor SSH
                var result = client.RunCommand("ls");
                
                // Imprime el resultado del comando
                Console.WriteLine(result.Result);
                
                // Cierra la conexión SSH
                client.Disconnect();
            }
        }
    }
}

En el código anterior de C#:

  • Primero se inicializan las credenciales de inicio de sesión con la dirección del host, el nombre de usuario y la contraseña.
  • Luego, se crea una nueva conexión SSH usando el objeto SshClient.
  • La conexión se establece mediante el método Connect y se ejecuta un comando en el servidor SSH con el método RunCommand.
  • Finalmente, se imprime el resultado del comando y se cierra la conexión SSH con el método Disconnect.

En resumen, el protocolo SSH es una herramienta valiosa y ampliamente utilizada para conectarse y administrar dispositivos remotos de forma segura. Con su enfoque en la seguridad y la flexibilidad, SSH es una solución sólida para una amplia gama de usos, desde la administración de servidores hasta la automatización de tareas.

🧐 Autoevaluación: SSH

¿El protocolo SSH está cifrado?

¿Para conectarte por SSH, debes compartir tu clave privada?

No se puede habilitar el protocolo SSH en Ubuntu

Juan Carlos

Juan Carlos García

Desarrollador de software / SEO

Durante años he desarrollado plataformas dedicadas al rastreo satelital y varios sitios web que se encuentran en la primera página de Google, y hoy quiero compartir contigo lo que se en tecnologías como: Node JS, PHP, C# y Bases de datos.

Si quieres apoyarme sígueme en mis redes sociales y suscríbete a mi canal de YouTube.

EWebik

Diseño de páginas web y aplicaciones moviles.

© 2024 EWebik