Guía básica sobre SSH: Qué es, cómo instalarlo y cómo utilizarlo correctamente
Categoría:
Soporte y Ayuda, Sysadmin
Fecha:
26/02/2020
Con el nacimiento de equipos informáticos que funcionan a modo de servidor (es decir, ordenadores que sirven para ofrecer servicios a otros usuarios como, por ejemplo, un servidor de hosting compartido de Raiola Networks) se hizo imprescindible desarrollar alguna forma de poder administrar estos equipos de forma remota, sin estar físicamente delante de ellos.
Tanto si es la primera vez que vas a realizar una conexión SSH como si ya la has hecho alguna vez, esta guía te servirá de ayuda para comprender qué es lo que realmente estás haciendo y cómo funciona el protocolo SSH.
A lo largo de la explicación veremos qué es SSH, cómo funciona, los tipos de cifrado que utiliza y los comandos SSH más utilizados.
Como ya te comentaba en la introducción, SSH ( acrónimo de Secure SHell ) es un protocolo de red que sirve para administrar de forma remota, desde la comodidad de tu oficina o de tu despacho en casa, un servidor sin tener que desplazarte al centro de datos en que se encuentra alojado.
Para poder comprender qué es SSH, primero debes saber qué es telnet, ya que es el predecesor de SSH. Podríamos decir que es algo así como http a https.
Mediante telnet puedes conectarte a un equipo remoto y mover archivos de una carpeta a otra o eliminarlos, es decir, usar los comandos típicos de SSH (como cp o rm) o realizar tareas más complejas como la creación de una base de datos e inserción de contenido en la misma.
La gran desventaja de telnet es que las conexiones son en texto plano. Esto significa que un usuario que espía tus conexiones de red podrá entender toda la conversación entre el servidor y tu ordenador. No solo eso: podrá capturar la contraseña de forma sencilla y colarse en el servidor.
En la siguiente imagen puedes ver un ejemplo de una conexión telnet a un servidor VPS.
Te explico lo que significa todo lo que ves en pantalla:
Como te decía, SSH ha sucedido a telnet, dejando este último relegado a herramienta de diagnóstico, ya que las conexiones que se realizan mediante el protocolo SSH son seguras. Una conexión por SSH utiliza algoritmos de cifrado actuales y seguros por lo que, aunque alguien espíe tus conexiones de red, no obtendrá más que una cadena ininteligible de caracteres que no podrá descifrar.
Por lo tanto, a modo de resumen, SSH es un protocolo de red cifrado que te permite manejar un servidor remoto como si lo tuvieras delante.
En su forma más básica, SSH te permitirá conectarte a un equipo remoto mediante un usuario y contraseña para que puedas comenzar a explotar todo el potencial del servidor a tu disposición con un par de comandos.
Antes de abrir el terminal y conectarte, te explicaré cómo funciona SSH y por qué es tan seguro este protocolo. Para ello, te voy a explicar los distintos métodos de cifrado. Esto te servirá para comprender el funcionamiento de las comunicaciones seguras en cualquier protocolo de red como ftp (ftps) o http (https).
La forma en que el protocolo SSH gestiona las conexiones es tremendamente segura.
Una vez aprendas a iniciar una conexión SSH desde un terminal, podrás comprobarlo revisando tipos de certificados que ofrece tu cliente SSH y el servidor al que te estás conectando con el comando ssh -vv usuario@servidor
A continuación, te explico qué tipos de cifrado existen y cuáles utilizar para que tus comunicaciones sean perfectamente seguras.
La criptografía simétrica es la más antigua de todas y se basa en que dos ordenadores que se comunican entre sí comparten un secreto. De ahí el segundo nombre que recibe este método, cifrado de clave secreta.
La clave compartida puede ser una palabra, un número o una cadena aleatoria de caracteres y se usa para modificar los mensajes que se enviarán entre los dos equipos de una manera preestablecida. Así, sabiendo la clave y la forma en que los mensajes son cifrados con ella, se pueden codificar y descodificar.
En este tipo de criptografía, la seguridad radica casi en exclusiva en utilizar un secreto fuerte y no tanto en el método de cifrado (este último podría ser conocido por un atacante sin problema), ya que siempre que desconozca la clave le será imposible descifrar el mensaje.
SSH utiliza este método de cifrado para las comunicaciones. No voy a entrar en los detalles técnicos de cómo se realiza, pero básicamente cuando te conectas por SSH el programa que usas a modo de cliente y el servidor negocian un tipo de cifrado. Algunos ejemplos son: AES, blowfish o arcfour en sus distintas variantes.
Una vez han llegado a un acuerdo en el tipo de cifrado a utilizar, el cliente y el servidor contribuyen de forma paralela a crear un secreto mediante un proceso conocido como algoritmo de intercambio de claves, basado en el protocolo diffie-hellman. El resultado es que tanto el cliente como el servidor llegan a la misma clave de forma independiente compartiendo cierta información pública y manipulándola con información secreta.
En contra de lo que se puede pensar, el protocolo SSH solamente utiliza cifrado asimétrico para la autenticación de usuarios, y no es obligatorio, ya que normalmente nos conectaremos con nuestro nombre de usuario y contraseña. Simplemente añade una capa de seguridad extra a las conexiones SSH.
Este sistema de cifrado se basa en que cada uno de los equipos involucrados en la comunicación disponen de un par de claves, una clave pública (que, como su nombre indica, puede ser mostrada a cualquiera) y una clave privada.
Para que comprendas el funcionamiento de este sistema, primero te voy a enseñar a generar las claves que te decía. Mediante el comando ssh-keygen puedes generar una pareja de claves pública y privada como las que se usan para las conexiones seguras https o SSH.
Como puedes ver, el método usado para generar la clave es mediante el cifrado RSA. Sin embargo, existen otros muchos como EDCSA o ed25519, por ejemplo.
Te explico el resto de argumentos del comando anterior:
Estas claves funcionan de modo que la clave privada, que es la parte realmente importante, no sea accesible para otros. Es la llave con la que se descifran los mensajes.
La clave pública puede ser compartida ya que, en realidad, a partir de una misma clave privada pueden generarse infinidad de claves públicas distintas. De hecho, una clave pública se envía en la comunicación inicial entre el cliente y el servidor SSH.
Una vez dispones de una clave pública y otra privada, cuando inicias una conexión SSH puedes tratar de hacerlo con una conexión con cifrado asimétrico de forma que, si la clave privada figura como 'autorizada' en el servidor, el proceso de autenticación será más rápido y seguro.
Lo que sucede realmente es que, una vez el servidor ha comprobado que la clave con la que intentas conectarte está autorizada, creará un mensaje aleatorio cifrado con la clave pública y te lo devolverá para comprobar que eres capaz de descifrarlo.
Mediante la clave privada se descifra el mensaje y se devuelve al servidor. Si concuerda con el mensaje que ha generado en un primer momento, la autenticación es exitosa y tienes acceso SSH sin tener que usar una contraseña.
Voy a ponerme todavía más técnico y voy a comenzar a hablar de matemáticas, ya que es en este ámbito donde se conoce como función hash a aquella que no tiene inversa. Traducido al lenguaje humano, esto quiere decir que un mensaje cifrado con una función hash no puede ser descifrado.
Evidentemente, este es el método más seguro para almacenar cualquier tipo de información. Así es como los sistemas operativos (o WordPress, nuestro CMS preferido) guardan las contraseñas en sus bases de datos, ya que una vez guardado un mensaje que ha sido pasado por una función hash, no puede obtenerse el mensaje original.
El protocolo SSH implementa este cifrado en cada uno de los mensajes que se envían entre el cliente y el servidor. Lo primero que hace es, mediante la clave que se ha generado a través del cifrado simétrico, codifica la información que se va a enviar. Una vez tiene el mensaje debidamente preparado, genera un hash único mediante un método preestablecido (md5, sha o el que se haya acordado usar al inicio de la conexión) durante la fase de negociación.
Esto añade una capa extra de seguridad (otra más) y es que, aunque un atacante haya obtenido el secreto compartido para la conexión cifrada asimétrica, no podrá modificar la información sin que los equipos involucrados se den cuenta, puesto que al modificarla el hash varía inevitablemente.
Así, cuando el receptor del mensaje comprueba que el mensaje recibido tiene el mismo hash que le ha enviado su interlocutor, sabe que la información es fiable y no ha sido alterada.
Vamos a verlo con un ejemplo:
Como ves, la cadena de caracteres cifrada de 'Raiola Networks' y de 'Raiola manda y no el panda' es distinta y única: del resultado no podremos obtener el texto inicial de ninguna forma.
Sin embargo, si coges el texto original y lo vuelves a pasar por la misma función hash, el resultado será exactamente el mismo que obtuviste originalmente. De ahí que te sirva para certificar que el mensaje original no ha sido alterado.
Cuando hablo de instalar SSH puedo referirme a dos cuestiones:
SSH es un protocolo exclusivo (al menos hasta hace poco) de sistemas operativos de tipo Unix, por lo que un servidor SSH se despliega exclusivamente en máquinas de este tipo.
Es por ello que te voy a explicar el método de instalación en dos ecosistemas Linux distintos: los basados en Debian y los basados en Red Hat, dos de las distribuciones Linux más importantes y que utilizan sistemas de instalación distintos:
El comando que necesitas para instalar un servidor SSH en Ubuntu (y sistemas basados en Debian) es:
El comando que necesitas para instalar un servidor SSH en CentOS (sistemas basados en Red Hat) es:
Como ves, la diferencia no es demasiado grande, simplemente cambia el comando utilizado para la instalación, ya que el paquete es el mismo. Ahora te voy a enseñar cómo realizar la instalación realmente, y es que quiero mejorar la seguridad del servidor al que me conecté antes por telnet, implementando los métodos de cifrado que acabo de explicarte para que las conexiones sean seguras.
Para ello, y como mi servidor tiene un Linux basado en Red Hat (CentOS), voy a instalar un servidor SSH con el comando 'yum install -y openssh-server'
Una vez ha acabado la instalación, voy a configurar el servidor para mejorar su seguridad cambiando el puerto, impidiendo el acceso del usuario root mediante contraseña y estableciendo un tiempo máximo de vida para las conexiones SSH, de forma que muera si hay demasiado tiempo entre un mensaje y otro.
Antes de desconectarte, puesto que has configurado que el usuario root solamente podrá acceder con una clave privada, debes autorizar la clave que has creado anteriormente. El archivo donde debes guardar la clave es /root/.ssh/authorized_keys Ahora, desde un nuevo terminal, pruebas la conexión.
Además, si quieres ponerte creativo y mostrar un mensaje predeterminado para evitar que alguien pueda adivinar qué servidor SSH utilizas y en qué versión, puedes editar el banner de bienvenida al servidor modificando el valor de Banner por un fichero de texto personalizado, como hago yo con el siguiente comando SSH:
A diferencia del servidor, existen clientes SSH para todos los sistemas operativos, por lo que te voy a explicar cómo instalar un cliente SSH en Windows, Linux y MAC para tener cubiertas todas las posibilidades.
MACOS es un sistema operativo de tipo Unix, por lo que te facilitará enormemente realizar las conexiones SSH ya que, entre sus herramientas preinstaladas, cuenta con un cliente SSH.
Para poder utilizarlo, lo único que debes hacer es buscar la aplicación Terminal y abrirla. Con esto será suficiente para establecer tu primera conexión SSH.
Windows, a diferencia de MACOS, no cuenta con un cliente SSH instalado por defecto, por lo que necesitarás uno. Existen multitud de aplicaciones que puedes utilizar. Yo voy a utilizar Putty:
Al igual que en MACOS, los equipos Linux suelen venir con un cliente SSH instalado, por lo que nuevamente lo único que debes hacer es ir a Inicio > Herramientas > Terminal y abrir la aplicación para poder comenzar a utilizar SSH exactamente igual que en MacOS.
Una vez que tienes instalado un cliente SSH, lo que debes hacer es realizar una conexión al servidor. Te voy a enseñar a hacerlo en los diferentes sistemas operativos, como en el paso anterior.
Ahora que tienes el terminal abierto desde el paso anterior, para establecer tu primera conexión SSH solamente debes escribir:
Yo voy a conectarme a un servidor optimizado en Raiola Networks con los datos recibidos en el email de bienvenida, los datos son:
El programa te pedirá la contraseña y (esto es muy importante) cuando la estés escribiendo no aparecerán puntos, asteriscos o nada similar: parece que nada sucede. Se trata de una medida de seguridad para evitar que alguien, al ver el número de puntos o asteriscos, sepa la longitud de tu clave. Simplemente escríbela, pulsa Intro y ya estás conectado.
Ya tienes instalado Putty, así que ahora vas a realizar tu primera conexión SSH desde Windows. Para realizar la conexión tienes que usar el nombre del servidor o su dirección IP y pulsar en Open:
Ahora se te muestra la clave pública del servidor, acéptala para confiar en ella.
Esto te pedirá el nombre de usuario y, una vez establecido, la contraseña.
Al igual que en MAC, no aparecerán caracteres al escribir la contraseña. Escríbela, pulsa Intro y ya has realizado tu primera conexión SSH.
En Linux podrás establecer la conexión SSH exactamente igual que hiciste anteriormente en MAC. Abre un terminal y teclea:
Una vez has establecido tu primera conexión SSH, te preguntarás: "¿Y ahora qué?"
SSH es tan potente que hasta el día de hoy no he encontrado ninguna herramienta que se pueda usar con terminal gráfico y no exista en línea de comandos (CLI, siglas de command line interface o, en inglés, interfaz de línea de comandos). Además, suelen tener muchas más opciones en esta última, por lo que se te acaba de abrir un mundo de posibilidades.
Vamos con los comandos más usados:
Ahora te voy a mostrar un ejemplo práctico. Vas a descargar un WordPress e instalarlo exclusivamente por terminal en un servidor VPS optimizado de Raiola Networks:
Ahora solo queda que compruebes que WordPress está instalado correctamente, accediendo con un navegador.
Como te comentaba, el número de comandos es infinito, por lo que lo mejor es que investigues un poco por tu cuenta.
Podrás encontrar todos los comandos a los que tiene acceso tu usuario ejecutando lo siguiente:
Cuando realizas una conexión SSH, se pueden dar distintos errores. Te muestro los más habituales y cómo puedes atajarlos.
El error que más veces he visto ha sido el que te comenté en el apartado sobre cómo acceder por SSH. Como usuario, estás acostumbrado a que, cuando tecleas una contraseña, aparezcan puntos, asteriscos, etc. Es decir, a que exista una respuesta. Seguramente te parezca extraño e incluso provoque que escribas mal tu clave de acceso si no ves una respuesta por parte de la aplicación. Algunas aplicaciones ya han reparado en esto y ahora sí ofrecen respuesta al teclear la clave, aunque no es lo habitual.
Otro de los errores más comunes es escribir de forma incorrecta un comando. Si escribes 'la' en vez de 'ls', la terminal arrojará un error diciéndote que el comando que intentas utilizar no existe. Simplemente, escribe correctamente el comando y todo funcionará.
Cuando te conectas por primera vez a un servidor SSH, se te preguntará si quieres guardar su 'fingerprint' o clave pública. Esta es una medida de seguridad para evitar que un servidor intente suplantar la identidad de otro. El problema viene cuando quieres conectarte tras haber formateado un servidor y es que el fingerprint cambia.
Si la huella del servidor cambia, se aborta el intento de conexión por motivos obvios. Además, se te dará un comando a ejecutar para que puedas forzar el borrado de la huella solamente si estás 100% seguro de que el servidor es correcto. Será algo similar a:
A la hora de utilizar un ordenador por línea de comandos, es altamente importante prestar atención y leer con detalle todos los mensajes que nos ofrece el terminal, ya que la mayoría de errores suelen venir con una explicación de por qué sucede y cómo solucionarlo. Si no, siempre puedes preguntarme en los comentarios.
Aunque, en un principio, realizar una conexión SSH y utilizar un ordenador en línea de comandos puede parecer intimidante (a mí me ha pasado), una vez empiezas a encontrarte cómodo con esta interfaz descubrirás que es tremendamente potente y que ofrece posibilidades muchísimo más amplias que la interfaz gráfica.
Te animo a leer nuestro post sobre wp-cli para que comiences a comprender por qué SSH debería ser una de las herramientas imprescindibles en tu día a día para mejorar tu productividad y convertirte en una persona altamente eficiente.
Tanto si es la primera vez que vas a realizar una conexión SSH como si ya la has hecho alguna vez, esta guía te servirá de ayuda para comprender qué es lo que realmente estás haciendo y cómo funciona el protocolo SSH.
A lo largo de la explicación veremos qué es SSH, cómo funciona, los tipos de cifrado que utiliza y los comandos SSH más utilizados.
Índice del artículo
- Qué es SSH y para qué sirve
- Cómo funciona SSH
- Tipos de cifrado
- Cómo instalar y configurar ssh
- Cómo instalar un servidor SSH
- Cómo instalar un cliente SSH
- Cómo acceder por SSH
- Cómo acceder por SSH en MAC
- Cómo acceder por SSH en Windows
- Cómo acceder por SSH en Linux
- Comandos de SSH
- Errores comunes en SSH y qué significan
- Conclusión
Qué es SSH y para qué sirve
Como ya te comentaba en la introducción, SSH ( acrónimo de Secure SHell ) es un protocolo de red que sirve para administrar de forma remota, desde la comodidad de tu oficina o de tu despacho en casa, un servidor sin tener que desplazarte al centro de datos en que se encuentra alojado.
Para poder comprender qué es SSH, primero debes saber qué es telnet, ya que es el predecesor de SSH. Podríamos decir que es algo así como http a https.
Mediante telnet puedes conectarte a un equipo remoto y mover archivos de una carpeta a otra o eliminarlos, es decir, usar los comandos típicos de SSH (como cp o rm) o realizar tareas más complejas como la creación de una base de datos e inserción de contenido en la misma.
La gran desventaja de telnet es que las conexiones son en texto plano. Esto significa que un usuario que espía tus conexiones de red podrá entender toda la conversación entre el servidor y tu ordenador. No solo eso: podrá capturar la contraseña de forma sencilla y colarse en el servidor.
En la siguiente imagen puedes ver un ejemplo de una conexión telnet a un servidor VPS.
Te explico lo que significa todo lo que ves en pantalla:
- telnet 91.134.16.2: Se realiza una conexión de tipo telnet al servidor 91.134.16.2
- nuevo login: root El servidor me pide un usuario, utilizo el usuario root, superadministrador en sistemas operativos de tipo unix.
- Password: Aunque no se ven puntos ni asteriscos, aquí he tecleado mi contraseña.
- [ root@raiolanetworks.servidordepruebas.com ] # ls -a Aquí ejecuto el comando ssh ls con el modificador -a para listar todos los contenidos de un directorio, incluidos archivos ocultos.
Como te decía, SSH ha sucedido a telnet, dejando este último relegado a herramienta de diagnóstico, ya que las conexiones que se realizan mediante el protocolo SSH son seguras. Una conexión por SSH utiliza algoritmos de cifrado actuales y seguros por lo que, aunque alguien espíe tus conexiones de red, no obtendrá más que una cadena ininteligible de caracteres que no podrá descifrar.
Por lo tanto, a modo de resumen, SSH es un protocolo de red cifrado que te permite manejar un servidor remoto como si lo tuvieras delante.
Cómo funciona SSH
En su forma más básica, SSH te permitirá conectarte a un equipo remoto mediante un usuario y contraseña para que puedas comenzar a explotar todo el potencial del servidor a tu disposición con un par de comandos.
Antes de abrir el terminal y conectarte, te explicaré cómo funciona SSH y por qué es tan seguro este protocolo. Para ello, te voy a explicar los distintos métodos de cifrado. Esto te servirá para comprender el funcionamiento de las comunicaciones seguras en cualquier protocolo de red como ftp (ftps) o http (https).
Tipos de cifrado
La forma en que el protocolo SSH gestiona las conexiones es tremendamente segura.
Una vez aprendas a iniciar una conexión SSH desde un terminal, podrás comprobarlo revisando tipos de certificados que ofrece tu cliente SSH y el servidor al que te estás conectando con el comando ssh -vv usuario@servidor
A continuación, te explico qué tipos de cifrado existen y cuáles utilizar para que tus comunicaciones sean perfectamente seguras.
Cifrado simétrico o criptografía de clave secreta
La criptografía simétrica es la más antigua de todas y se basa en que dos ordenadores que se comunican entre sí comparten un secreto. De ahí el segundo nombre que recibe este método, cifrado de clave secreta.
La clave compartida puede ser una palabra, un número o una cadena aleatoria de caracteres y se usa para modificar los mensajes que se enviarán entre los dos equipos de una manera preestablecida. Así, sabiendo la clave y la forma en que los mensajes son cifrados con ella, se pueden codificar y descodificar.
En este tipo de criptografía, la seguridad radica casi en exclusiva en utilizar un secreto fuerte y no tanto en el método de cifrado (este último podría ser conocido por un atacante sin problema), ya que siempre que desconozca la clave le será imposible descifrar el mensaje.
SSH utiliza este método de cifrado para las comunicaciones. No voy a entrar en los detalles técnicos de cómo se realiza, pero básicamente cuando te conectas por SSH el programa que usas a modo de cliente y el servidor negocian un tipo de cifrado. Algunos ejemplos son: AES, blowfish o arcfour en sus distintas variantes.
Una vez han llegado a un acuerdo en el tipo de cifrado a utilizar, el cliente y el servidor contribuyen de forma paralela a crear un secreto mediante un proceso conocido como algoritmo de intercambio de claves, basado en el protocolo diffie-hellman. El resultado es que tanto el cliente como el servidor llegan a la misma clave de forma independiente compartiendo cierta información pública y manipulándola con información secreta.
Cifrado asimétrico
En contra de lo que se puede pensar, el protocolo SSH solamente utiliza cifrado asimétrico para la autenticación de usuarios, y no es obligatorio, ya que normalmente nos conectaremos con nuestro nombre de usuario y contraseña. Simplemente añade una capa de seguridad extra a las conexiones SSH.
Este sistema de cifrado se basa en que cada uno de los equipos involucrados en la comunicación disponen de un par de claves, una clave pública (que, como su nombre indica, puede ser mostrada a cualquiera) y una clave privada.
Para que comprendas el funcionamiento de este sistema, primero te voy a enseñar a generar las claves que te decía. Mediante el comando ssh-keygen puedes generar una pareja de claves pública y privada como las que se usan para las conexiones seguras https o SSH.
ssh-keygen -t rsa -b 4096 -f clave_secreta -N ''
Como puedes ver, el método usado para generar la clave es mediante el cifrado RSA. Sin embargo, existen otros muchos como EDCSA o ed25519, por ejemplo.
Te explico el resto de argumentos del comando anterior:
- -b 4096: Esto hace que el número de bits de la clave privada sean de 4096.
- -f clave_secreta: La clave se guarda en un archivo llamado clave_secreta.
- -N‘’: Evita que no solicite contraseña a la hora de usarla (sí, se puede añadir seguridad extra a las claves para que nadie pueda usarlas sin contraseña).
Estas claves funcionan de modo que la clave privada, que es la parte realmente importante, no sea accesible para otros. Es la llave con la que se descifran los mensajes.
La clave pública puede ser compartida ya que, en realidad, a partir de una misma clave privada pueden generarse infinidad de claves públicas distintas. De hecho, una clave pública se envía en la comunicación inicial entre el cliente y el servidor SSH.
Una vez dispones de una clave pública y otra privada, cuando inicias una conexión SSH puedes tratar de hacerlo con una conexión con cifrado asimétrico de forma que, si la clave privada figura como 'autorizada' en el servidor, el proceso de autenticación será más rápido y seguro.
Lo que sucede realmente es que, una vez el servidor ha comprobado que la clave con la que intentas conectarte está autorizada, creará un mensaje aleatorio cifrado con la clave pública y te lo devolverá para comprobar que eres capaz de descifrarlo.
Mediante la clave privada se descifra el mensaje y se devuelve al servidor. Si concuerda con el mensaje que ha generado en un primer momento, la autenticación es exitosa y tienes acceso SSH sin tener que usar una contraseña.
Hashing
Voy a ponerme todavía más técnico y voy a comenzar a hablar de matemáticas, ya que es en este ámbito donde se conoce como función hash a aquella que no tiene inversa. Traducido al lenguaje humano, esto quiere decir que un mensaje cifrado con una función hash no puede ser descifrado.
Evidentemente, este es el método más seguro para almacenar cualquier tipo de información. Así es como los sistemas operativos (o WordPress, nuestro CMS preferido) guardan las contraseñas en sus bases de datos, ya que una vez guardado un mensaje que ha sido pasado por una función hash, no puede obtenerse el mensaje original.
El protocolo SSH implementa este cifrado en cada uno de los mensajes que se envían entre el cliente y el servidor. Lo primero que hace es, mediante la clave que se ha generado a través del cifrado simétrico, codifica la información que se va a enviar. Una vez tiene el mensaje debidamente preparado, genera un hash único mediante un método preestablecido (md5, sha o el que se haya acordado usar al inicio de la conexión) durante la fase de negociación.
Esto añade una capa extra de seguridad (otra más) y es que, aunque un atacante haya obtenido el secreto compartido para la conexión cifrada asimétrica, no podrá modificar la información sin que los equipos involucrados se den cuenta, puesto que al modificarla el hash varía inevitablemente.
Así, cuando el receptor del mensaje comprueba que el mensaje recibido tiene el mismo hash que le ha enviado su interlocutor, sabe que la información es fiable y no ha sido alterada.
Vamos a verlo con un ejemplo:
echo -n "Raiola Networks" | shasum
c7ccfb61f727966a2f7a7ed9e5824f457bbcb10a
echo -n "Raiola manda y no el panda" | shasum
b59996e8011e11a286d685ef12f1cb2fe3e1f2f4
Como ves, la cadena de caracteres cifrada de 'Raiola Networks' y de 'Raiola manda y no el panda' es distinta y única: del resultado no podremos obtener el texto inicial de ninguna forma.
Sin embargo, si coges el texto original y lo vuelves a pasar por la misma función hash, el resultado será exactamente el mismo que obtuviste originalmente. De ahí que te sirva para certificar que el mensaje original no ha sido alterado.
Cómo instalar y configurar ssh
Cuando hablo de instalar SSH puedo referirme a dos cuestiones:
- Servidor SSH: Es el programa que configuras en el servidor y que acepta las conexiones SSH. Si estás alojado con nosotros, no te preocupes ya que esto normalmente no tendrás que instalarlo. En los productos de Raiola Networks se te proporcionará instalado y preconfigurado por defecto.
- Cliente SSH: Es la aplicación con la que realizas una conexión SSH y que, en términos informáticos, actúa a modo de cliente. Dependiendo del sistema operativo que tengas, podrías tener un cliente SSH instalado por defecto o bien necesitarás instalar uno.
Cómo instalar un servidor SSH
SSH es un protocolo exclusivo (al menos hasta hace poco) de sistemas operativos de tipo Unix, por lo que un servidor SSH se despliega exclusivamente en máquinas de este tipo.
Es por ello que te voy a explicar el método de instalación en dos ecosistemas Linux distintos: los basados en Debian y los basados en Red Hat, dos de las distribuciones Linux más importantes y que utilizan sistemas de instalación distintos:
El comando que necesitas para instalar un servidor SSH en Ubuntu (y sistemas basados en Debian) es:
apt install -y openssh-server
El comando que necesitas para instalar un servidor SSH en CentOS (sistemas basados en Red Hat) es:
yum install -y openssh-server
Como ves, la diferencia no es demasiado grande, simplemente cambia el comando utilizado para la instalación, ya que el paquete es el mismo. Ahora te voy a enseñar cómo realizar la instalación realmente, y es que quiero mejorar la seguridad del servidor al que me conecté antes por telnet, implementando los métodos de cifrado que acabo de explicarte para que las conexiones sean seguras.
Para ello, y como mi servidor tiene un Linux basado en Red Hat (CentOS), voy a instalar un servidor SSH con el comando 'yum install -y openssh-server'
Una vez ha acabado la instalación, voy a configurar el servidor para mejorar su seguridad cambiando el puerto, impidiendo el acceso del usuario root mediante contraseña y estableciendo un tiempo máximo de vida para las conexiones SSH, de forma que muera si hay demasiado tiempo entre un mensaje y otro.
- Para cambiar el puerto modificaré la directiva Port de 22 a 11022, el que usan los planes de hosting compartido en Raiola Networks para conexiones SFTP.
- Para impedir que el usuario root pueda conectarse con contraseña tengo que modificar el valor de PermitRootLogin de Yes a prohibit-password.
- Voy a impedir también que nadie pueda conectarse con contraseñas vacías que, aunque parezca raro, puede suceder. Modifico el valor de PermitEmptyPasswords a No.
- Por último, para establecer un timeout en la conexión de 5 minutos establezco como valor de ClientAliveInterval a 300 segundos.
- En cuanto hayas hecho estos cambios, los guardas y reinicias el servicio sshd (para que tome las nuevas configuraciones) con el comando systemctl restart sshd
Antes de desconectarte, puesto que has configurado que el usuario root solamente podrá acceder con una clave privada, debes autorizar la clave que has creado anteriormente. El archivo donde debes guardar la clave es /root/.ssh/authorized_keys Ahora, desde un nuevo terminal, pruebas la conexión.
Además, si quieres ponerte creativo y mostrar un mensaje predeterminado para evitar que alguien pueda adivinar qué servidor SSH utilizas y en qué versión, puedes editar el banner de bienvenida al servidor modificando el valor de Banner por un fichero de texto personalizado, como hago yo con el siguiente comando SSH:
echo ‘Bienvenido a tu nuevo servidor en Raiola Networks!’ >> /etc/motd
Cómo instalar un cliente SSH
A diferencia del servidor, existen clientes SSH para todos los sistemas operativos, por lo que te voy a explicar cómo instalar un cliente SSH en Windows, Linux y MAC para tener cubiertas todas las posibilidades.
Cómo instalar SSH en MACOS
MACOS es un sistema operativo de tipo Unix, por lo que te facilitará enormemente realizar las conexiones SSH ya que, entre sus herramientas preinstaladas, cuenta con un cliente SSH.
Para poder utilizarlo, lo único que debes hacer es buscar la aplicación Terminal y abrirla. Con esto será suficiente para establecer tu primera conexión SSH.
Cómo instalar SSH en Windows
Windows, a diferencia de MACOS, no cuenta con un cliente SSH instalado por defecto, por lo que necesitarás uno. Existen multitud de aplicaciones que puedes utilizar. Yo voy a utilizar Putty:
- Pulsa en el enlace marcado en la captura:
- Descarga Putty pulsando en el enlace correspondiente a tu sistema operativo. El mío es de 64 bits:
- Busca el archivo descargado y haz doble clic para ejecutarlo. Acepta que se ejecute:
- Pulsa Siguiente para comenzar la instalación:
- Si la ruta en que se va a instalar el programa es válida, pulsa Siguiente:
- De nuevo, deja las opciones por defecto si no quieres modificar alguna y pulsa Siguiente:
- Finaliza la instalación:
Cómo instalar SSH en Linux
Al igual que en MACOS, los equipos Linux suelen venir con un cliente SSH instalado, por lo que nuevamente lo único que debes hacer es ir a Inicio > Herramientas > Terminal y abrir la aplicación para poder comenzar a utilizar SSH exactamente igual que en MacOS.
Cómo acceder por SSH
Una vez que tienes instalado un cliente SSH, lo que debes hacer es realizar una conexión al servidor. Te voy a enseñar a hacerlo en los diferentes sistemas operativos, como en el paso anterior.
Cómo acceder por SSH en MAC
Ahora que tienes el terminal abierto desde el paso anterior, para establecer tu primera conexión SSH solamente debes escribir:
ssh usuario@servidor
Yo voy a conectarme a un servidor optimizado en Raiola Networks con los datos recibidos en el email de bienvenida, los datos son:
ssh root@raiolanetworks.servidordepruebas.com
El programa te pedirá la contraseña y (esto es muy importante) cuando la estés escribiendo no aparecerán puntos, asteriscos o nada similar: parece que nada sucede. Se trata de una medida de seguridad para evitar que alguien, al ver el número de puntos o asteriscos, sepa la longitud de tu clave. Simplemente escríbela, pulsa Intro y ya estás conectado.
Cómo acceder por SSH en Windows
Ya tienes instalado Putty, así que ahora vas a realizar tu primera conexión SSH desde Windows. Para realizar la conexión tienes que usar el nombre del servidor o su dirección IP y pulsar en Open:
Ahora se te muestra la clave pública del servidor, acéptala para confiar en ella.
Esto te pedirá el nombre de usuario y, una vez establecido, la contraseña.
Al igual que en MAC, no aparecerán caracteres al escribir la contraseña. Escríbela, pulsa Intro y ya has realizado tu primera conexión SSH.
Cómo acceder por SSH en Linux
En Linux podrás establecer la conexión SSH exactamente igual que hiciste anteriormente en MAC. Abre un terminal y teclea:
ssh root@raiolanetworks.servidordepruebas.com
Comandos de SSH
Una vez has establecido tu primera conexión SSH, te preguntarás: "¿Y ahora qué?"
SSH es tan potente que hasta el día de hoy no he encontrado ninguna herramienta que se pueda usar con terminal gráfico y no exista en línea de comandos (CLI, siglas de command line interface o, en inglés, interfaz de línea de comandos). Además, suelen tener muchas más opciones en esta última, por lo que se te acaba de abrir un mundo de posibilidades.
Vamos con los comandos más usados:
- ls: Acrónimo de "list", listar en inglés, te sirve para ver los archivos y carpetas en una carpeta.
- cd: Change directory o cambiar directorio, te sirve para moverte de una carpeta a otra.
- rm: Remove o eliminar, usado para borrar archivos (no intentes borrar carpetas con este comando, al menos de momento).
- rmdir: Remove directory o eliminar directorio, para poder usarlo la carpeta debe estar previamente vacía.
- nano: Editor de textos. Lo puedes usar para editar el wp-config.php de WordPress al realizar una instalación nueva, por ejemplo.
Ahora te voy a mostrar un ejemplo práctico. Vas a descargar un WordPress e instalarlo exclusivamente por terminal en un servidor VPS optimizado de Raiola Networks:
- Lo primero que debes hacer es conectar por SSH al servidor, en mi caso abro un terminal y tecleo:
ssh root@raiolanetworks.servidordepruebas.com - Ahora vas a crear un usuario en Vesta, el panel de control de los servidores optimizados:
v-add-user ‘Fran’ ‘miclavesegura’ ‘email@dominio.tld’ - Ahora añades un dominio con v-add-domain ‘Fran’ ‘dominiowordpress.tld’
- Cambias a la carpeta donde funcionará el WordPress del dominio que acabas de añadir, en mi caso:
cd /home/Fran/web/dominiowordpress.tld/public_html - Lista los contenidos y bórralos. Es importante que los listes primero, ya que el comando SSH de borrado eliminará todo lo que encuentre (si no estás en la carpeta correcta, puedes acabar con tu servidor):
ls
find . -delete - Lista de nuevo la carpeta, esta vez incluyendo archivos ocultos, por si se nos ha escapado algo:
ls -a - Descarga el archivo comprimido con un WordPress listo para instalar:
wget ‘https://wordpress.org/latest.tar.gz’ - Descomprímelo y borra el archivo comprimido que acabas de descargar:
tar -xzf latest.tar.gz
rm lastest.tar.gz - Lista lo que acabas de descomprimir y muévelo al directorio public_html. Los símbolos * y . son especiales. * significa cualquier cosa, mientras que . simboliza la carpeta actual. Lo que estoy diciéndole al terminal SSH, en realidad, es que mueva cualquier cosa de la carpeta wordpress a la carpeta actual
ls
mv wordpress/* . - Elimina el directorio wordpress, que acaba de quedar vacío:
rmdir wordpress - Añade una base de datos en Vesta para poder instalar WordPress:
v-add-database ‘Fran’ ‘wp’ ‘wp’ ‘claveWordpress’ - Crea un archivo de configuración de WordPress con tu terminal SSH y el comando:
wp --allow-root config create --dbname=’Fran_wp’--dbuser=’Fran_wp’ --dbpass=’claveWordpress’ --dbhost=’localhost’ - Instala WordPress, es decir, genera las tablas en la base de datos y realiza el proceso necesario para que puedas acceder:
wp --allow-root core install --url=’https://dominiowordpress.tld’ --title=’Mi Blog’ --admin_user=’Fran’ --admin_password=’claveAccesoWordpress’ --admin_email=’email@dominio.tld’ --skip-email --path=$(pwd) - Configura la zona horaria que prefieras:
wp --allow-root option update timezone_string Europe/Madrid - Por último, establece los permisos correctos con el comando v-fixperms Fran
Ahora solo queda que compruebes que WordPress está instalado correctamente, accediendo con un navegador.
Como te comentaba, el número de comandos es infinito, por lo que lo mejor es que investigues un poco por tu cuenta.
Podrás encontrar todos los comandos a los que tiene acceso tu usuario ejecutando lo siguiente:
echo $PATH | tr ':' ' ' | xargs ls
Errores comunes en SSH y qué significan
Cuando realizas una conexión SSH, se pueden dar distintos errores. Te muestro los más habituales y cómo puedes atajarlos.
El error que más veces he visto ha sido el que te comenté en el apartado sobre cómo acceder por SSH. Como usuario, estás acostumbrado a que, cuando tecleas una contraseña, aparezcan puntos, asteriscos, etc. Es decir, a que exista una respuesta. Seguramente te parezca extraño e incluso provoque que escribas mal tu clave de acceso si no ves una respuesta por parte de la aplicación. Algunas aplicaciones ya han reparado en esto y ahora sí ofrecen respuesta al teclear la clave, aunque no es lo habitual.
Otro de los errores más comunes es escribir de forma incorrecta un comando. Si escribes 'la' en vez de 'ls', la terminal arrojará un error diciéndote que el comando que intentas utilizar no existe. Simplemente, escribe correctamente el comando y todo funcionará.
Cuando te conectas por primera vez a un servidor SSH, se te preguntará si quieres guardar su 'fingerprint' o clave pública. Esta es una medida de seguridad para evitar que un servidor intente suplantar la identidad de otro. El problema viene cuando quieres conectarte tras haber formateado un servidor y es que el fingerprint cambia.
Si la huella del servidor cambia, se aborta el intento de conexión por motivos obvios. Además, se te dará un comando a ejecutar para que puedas forzar el borrado de la huella solamente si estás 100% seguro de que el servidor es correcto. Será algo similar a:
ssh-keygen -f "/home/fran/.ssh/known_hosts" -R "servidoroptimizado.raiolanetworks.com"
A la hora de utilizar un ordenador por línea de comandos, es altamente importante prestar atención y leer con detalle todos los mensajes que nos ofrece el terminal, ya que la mayoría de errores suelen venir con una explicación de por qué sucede y cómo solucionarlo. Si no, siempre puedes preguntarme en los comentarios.
Conclusión
Aunque, en un principio, realizar una conexión SSH y utilizar un ordenador en línea de comandos puede parecer intimidante (a mí me ha pasado), una vez empiezas a encontrarte cómodo con esta interfaz descubrirás que es tremendamente potente y que ofrece posibilidades muchísimo más amplias que la interfaz gráfica.
Te animo a leer nuestro post sobre wp-cli para que comiences a comprender por qué SSH debería ser una de las herramientas imprescindibles en tu día a día para mejorar tu productividad y convertirte en una persona altamente eficiente.
Deja una respuesta
Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *