Uno de los elementos más importantes a la hora de trabajar en un servidor carente de interfaz gráfica sin lugar a dudas es el SSH.
Este protocolo es utilizado a diario por los administradores de sistema y con frecuencia también por desarrolladores. Tiene el potencial para ayudarnos a llevar a cabo toda clase de tareas en nuestro servidor.
Hoy veremos qué es el SSH, para qué sirve un servidor SSH, ejemplos y características del servicio más utilizado por equipos de SysAdmins, Webmasters y DevOps en general.
Contenido
- 1 Servidor SSH: ¿Qué es?
- 2 ¿Para qué sirve?
- 3 ¿Cómo funciona?
- 4 Cómo se usa
- 5 Instalación del Servidor SSH en Linux
- 6 Configuración de Puerto de Servidor SSH
- 7 SSH1 vs SSH2: Diferencias Principales
- 8 Telnet vs SSH
- 9 Comandos Básicos de SSH
- 10 Servidor SSH vs Servidor FTP
- 11 Ventajas y desventajas del Servidor SSH
- 12 Conclusión
Servidor SSH: ¿Qué es?
SSH es el acrónimo de Secure Shell, y es un protocolo que se utiliza en el manejo de servidores de forma remota, permitiendo a un usuario realizar toda clase de tareas sobre el mismo.
En las conexiones realizadas por medio de SSH, toda la información viaja de forma encriptada, lo cual lo convierte en uno de los medios más seguros a la hora de trabajar en un servidor.
Sus orígenes se remontan al año 1995, cuando su primera versión (lo que hoy llamamos SSH-1) fue desarrollada por Tatu Ylönen en la Universidad de Helsinki, Finlandia. El objetivo inicial de SSH era convertirse en un reemplazo seguro y efectivo de otros protocolos que estaban de moda en la época, pero que no eran realmente seguros, como por ejemplo Telnet.
SSH comenzó a ganar popularidad rápidamente: en cuestión de unos pocos meses el uso se había expandido a más de 20.000 usuarios en 50 países, y unos 5 años más tarde ya tenía más de 2 millones de usuarios a nivel mundial.
La segunda versión, ampliamente usada hoy en día, fue lanzada en el año 2006 y la conocemos como SSH2. Provee una mayor seguridad frente a la anterior y también integra nuevas funciones.
CentOS o Ubuntu Linux, Acceso SSH root garantizado desde $24,90/mes
¿Para qué sirve?
Como les comentábamos, el cometido de SSH es ser un protocolo de conexión remota segura y encriptada para que cualquier usuario pueda transferir información.
Pero no solamente se pueden transferir datos, también es una útil forma de ingresar al servidor para conectarnos a su intérprete de comandos (bash por ejemplo), y así poder administrar el servidor remotamente.
Ejemplos de uso de SSH
Aparte del ya mencionado uso en la administración de servidores linux mediante conexiones remotas, existen otras formas de sacarle provecho a este protocolo, por ejemplo las mencionadas a continuación.
- Git: SSH es muy usado por programadores a la hora de trabajar con herramientas de control de versiones como es el caso de Git. El control de versiones se ha vuelto indispensable para el desarrollo (ya sea web, apps, gráfico, etc.), y manejar Git mediante SSH es algo que todo programador tiene que aprender. A medida que las reglas del juego cambian debemos adaptarnos y hoy por hoy el uso de Git (o similares) es prácticamente indispensable.
- Copiado de datos: con el protocolo SSH podemos copiar datos, esto se puede lograr por ejemplo mediante herramientas como rsync o scp, que tienen sintaxis sencillas y que usan una conexión vía SSH para copiar datos entre servidores, lo cual hace que toda esta información viaje entre los servidores seguros. Un ejemplo de esto pueden ser las migraciones de sitios entre servidores, o por supuesto también equipos locales y servidores, sin importar que estén en distintas localizaciones.
- Ejecución de comandos remotos: gracias a SSH también tenemos la posibilidad de correr comandos en forma remota. Esto podemos lograr ejecutando una sintaxis en nuestro terminal o, si el comando es complejo, mediante un script en bash.
- Multiplexación en SSH: si bien no es usado comúnmente, con SSH podemos realizar una multiplexación, es decir, crear varias sesiones de SSH mediante una sola conexión TCP. Puede sonar tonto pero es algo importante si buscamos ahorrar recursos, ya que este método es mucho más efectivo que abrir varias conexiones SSH independientes para cada sesión.
¿Cómo funciona?
Establecer una conexión SSH es sencillo, la única herramienta que vamos a necesitar para hacerlo es una del tipo terminal o consola, como por ejemplo la clásica consola de Linux y Mac, o un programa como PuTTY en el caso de Windows.
La conexión SSH usa tres ítems: un usuario, un puerto y un servidor. Con solo esos tres elementos podemos establecer una conexión segura entre dos servidores.
Esta seguridad se logra mediante el uso de llaves y técnicas de cifrado. Cada server tiene su propia llave de cifrado, y al establecer una conexión por primera vez con un server tendremos que añadir el servidor en cuestión a una lista de servidores a los cuales es seguro conectarnos.
Tipos de Encriptación SSH
Como decíamos, parte de la seguridad que brinda SSH se logra gracias a las técnicas de cifrado, y hay tres de ellas:
- Encriptación simétrica: es quizá la más común, y se basa en el uso de una secret key, también llamada clave secreta en español. Esta clave se usa tanto en el cifrado como en el descifrado de la conexión. Por supuesto si alguien lograra interceptar la conexión y de alguna forma obtuvo la clave secreta (prácticamente imposible pues no es algo preestablecido, es decir que es única para cada conexión) entonces podrá ver claramente la información que se está transfiriendo entre los servidores.
- Encriptación asimétrica: en este tipo de conexión utilizamos un total de dos claves, es decir una más que en la simétrica. Se trata de una clave pública y de una clave privada. Cada clave pública está ligada a su propia clave privada, y la información encriptada solo se puede desencriptar conociendo la clave privada, así que incluso si tenemos la clave pública no vamos a poder ver los datos, para eso sí o sí se necesita la privada, la cual por supuesto no es compartida con terceros y no puede ser calculada a partir de la pública.
- Hashing: una conexión cifrada con un hash no puede ser revertida, es prácticamente única y casi imposible de predecir, de hecho solo el servidor que recibirá los datos será capaz de leerlos correctamente. Las conexiones cifradas mediante hash se logran convirtiendo la información en una nueva cadena de datos que poseen una cierta longitud que jamás cambia. El hash que se originó en un servidor tiene que ser idéntico al que es recibido por el otro server, si hubo alteraciones en el hash recibido quiere decir que la información de alguna forma fue interceptada y modificada.
Cómo se usa
La sintaxis básica de conexión por medio de SSH es la siguiente:
ssh -p PUERTO USUARIO@SERVIDOR
Como decíamos antes, solo tres datos se requieren, y como podemos ver basándonos en el ejemplo se trata del puerto, del usuario y de la IP o hostame del server en cuestión, en algunos casos incluso no es necesario especificar un puerto si el servidor al cual vamos a conectar está usando el puerto de SSH estándar, que es el 22.
Pero eso no es todo, ya que existen algunos parámetros adicionales que podemos utilizar en nuestra conexión SSH, dependiendo claro de lo que necesitemos. Algunos ejemplos comunes pueden ser:
- -4 y -6: la primera opción nos permite forzar la conexión a realizarse mediante una IPv4, mientras que la segunda por su lado hace lo mismo pero una IPv6.
- -C: se utiliza para comprimir la conexión, ayudando a obtener mejores resultados, aunque solo es útil en redes lentas. Si se está trabajando sobre redes rápidas es mejor no utilizar esta opción, pues el efecto será lo opuesto a lo que buscamos.
- -p: nos permite indicar cuál es el puerto de SSH al cual nos queremos conectar, se suele usar cuando dicho puerto es distinto al estándar (22).
- -q: el llamado «modo silencioso», suprime la mayor parte de los mensajes y avisos que puedan aparecer durante la conexión.
- -v: modo verboso, extremadamente útil para ver en detalle todo el proceso de conexión, lo cual nos puede ser de gran utilidad en el caso de que la conexión esté fallando y no logremos darnos cuenta de dónde puede estar el problema.
Instalación del Servidor SSH en Linux
En Linux se puede instalar SSH de forma muy fácil y rápida en las principales distribuciones Linux mediante el uso del paquete OpenSSH
En Ubuntu/Debian, ingresando como root desde la terminal bastará con seguir estos pasos:
sudo apt-get install openssh-server
Iniciamos el servicio:
sudo service ssh restart
En CentOS y Fedora puede hacerse con estos pasos:
yum install openssh-server
Iniciamos el demonio SSH:
service sshd start
Por defecto el servidor SSH corre en el puerto 22.
Configuración de Puerto de Servidor SSH
Para la seguridad de nuestro servidor Linux es imprescindible realizar el cambio del puerto de SSH. Por defecto SSH corre sobre el puerto 22, y lógicamente es una configuración estándar es muy conocida. Utilizarla solo le facilita la tarea a quienes buscan ingresar en nuestro server sin autorización.
Cambiando el puerto de SSH de nuestro servidor estaremos ganando puntos en materia de seguridad, así que vamos a ponernos manos a la obra.
Lo primero que debemos hacer es editar el archivo /etc/ssh/sshd_config, podemos editarlo con cualquier editor de texto presente en nuestro servidor, como puede ser el caso de nano, vim, etc.
Una vez tengamos el archivo abierto, vamos a buscar la línea que haga referencia al puerto, que debería ser como la siguiente:
#Port 22
En algunos casos es posible que sea solo «Port 22«, es decir, sin el numeral (#) al comienzo. El numeral no lo necesitamos, así que lo borramos si lo tiene, y a continuación cambiamos el número 22 por otro. Podemos asignar miles de números distintos, aunque lo recomendable es uno mayor a 1024, debido a que hay muchos servicios que corren en puertos menores y no queremos generar conflictos.
Importante: si estas corriendo un firewall en tu servidor Linux, deberás abrir también el puerto nuevo que vayas a usar, de lo contrario podrás quedarte sin acceso a tu servidor.
Una vez hemos asignado un nuevo número, simplemente guardamos los cambios y enseguida reiniciamos el servicio de SSH:
service sshd restart
En la mayoría de las distribuciones bastará ejecutar ese comando para reiniciar SSH y tomar el cambio, aunque en otras puede ser necesario ejecutar el siguiente: /etc/init.d/sshd restart
Si usas un sistema operativo basado en Systemd (como CentOS o RHEL 7), necesitarás reiniciar SSH y habilitarlo para que inicie con el inicio del sistema usando estos comandos:
systemctl restart sshd.service
systemctl enable sshd.service
Una vez el servicio se reinicie (será solo un segundo), estaremos corriendo nuestro SSH en el nuevo puerto que hemos especificado.
SSH1 vs SSH2: Diferencias Principales
La primera gran versión de SSH posee unas cuantas diferencias si la comparamos con su sucesora, y la mayoría recaen en términos de funciones y seguridad. SSH2 es una versión muy mejorada de SSH1, y estas son las principales ventajas:
- Más cifrados: SSH2 incorpora nuevos códigos de cifrado que no tenía la versión original, como por ejemplo AES y 3DES.
- MAC: se añadió soporte para algoritmos del tipo MAC (Message Authentication Code), lo cuales se utilizan en verificación de integridad de datos.
- Claves públicas: tenemos soporte para certificados de claves públicas, que si bien hoy en día puede ser visto como algo indispensable, no era el caso hace más de 20 años cuando salió SSH1.
- SFTP: es un protocolo de transferencia de archivos diseñado para ser utilizado exclusivamente con SSH2. No debe ser tomado como un simple servidor FTP sobre SSH, gran error ya que se trata de un protocolo totalmente nuevo.
- Eavesdropping: «escuchar a escondidas» sería quizá la traducción más literal. SSH2 previene el robo de información gracias a una encriptación completa, digamos de cabo a rabo, de los datos que se transfieren entre los servidores.
- Spoofing: SSH2 impide que seamos víctimas de un spoofing de IPs o de DNS gracias a las verificaciones que realiza antes de aceptar o abrir por completo una conexión. Por cada sesión, el servicio de SSH verificará que el otro servidor sea efectivamente quien dice ser, y esto se logra mediante una serie de claves almacenadas en ambos. Si la clave del server local y la del remoto no coinciden, la conexión no se establece.
- Robo de sesiones: SSH2 no es 100% efectivo cuando se trata de protegernos contra el robo de sesiones, pero sí posee mecanismos que SSH1 no, por ejemplo un proceso de verificación de integridad. Si se detecta que la sesión ha sido modificada de alguna manera, la conexión se cerrará en forma inmediata. Los hash MD5 y SHA-1 se usan durante estos procesos de verificación de integridad de la sesión.
Telnet vs SSH
Al comienzo cuando hablábamos sobre los orígenes de SSH comentábamos que surgió como una alternativa a protocolos no seguros como es el caso de Telnet.
¿Qué es lo que tiene Telnet de malo exactamente?
Pues el gran problema de dicho protocolo es que transfiere los datos en texto plano, en otras palabras, los datos no viajan entre servidores en forma cifrada como sí ocurre en el caso de una conexión SSH.
Si usamos una conexión con Telnet nos estamos arriesgando a que nuestra información sea robada fácilmente. Esto ya es motivo suficiente para que dejemos de usarlo en favor de SSH.
La única ventaja real que Telnet posee frente a SSH es la velocidad, ya que al no cifrar datos los puede transmitir más rápidamente. El único caso en que puede pasar por nuestra cabeza el uso de Telnet es si estamos conectándonos a través de una red privada, pero si es mediante una red pública siempre va a ser mejor SSH, las ventajas en seguridad son indiscutibles e inclinan la balanza a su favor.
Comandos Básicos de SSH
Existen algunos comandos básicos de SSH que esencialmente funcionan gracias a este protocolo. Veamos a continuación algunos de ellos.
SCP: este comando nos permite realizar un copiado de archivos entre dos servidores. Dado que se usa SSH en el proceso nuestros archivos se copiarán de un server a otro en forma codificada. La sintaxis básica de este comando es la siguiente:
scp -P puerto archivos usuario@servidor:destino
Como podemos ver incluso comparte algunos elementos con la sintaxis básica de SSH, como es el caso del puerto, el usuario y el servidor.
SFTP: se trata de un nuevo protocolo de FTP estrenado junto a SSH2. Es mucho más seguro que el FTP tradicional ya que utiliza una conexión cifrada. Es muy fácil de usar, lo primero que debes hacer es conectarnos al servidor remoto:
sftp usuario@servidor
Y posteriormente podremos ejecutar distintas acciones, como puede ser enviar archivos desde nuestro server al remoto o viceversa, renombrar archivos y directorios, borrar archivos y directorios, crear nuevos, etc.
SSH: por supuesto no puede faltar el comando que la da nombre a este artículo, y por ende el más común entre los comandos básicos de SSH. Ya hemos comentado previamente cuál es su sintaxis básica:
ssh -p PUERTO USUARIO@SERVIDOR
Aquí solo debemos reemplazar los datos y, si la conexión está habilitada en el otro servidor, entonces podremos conectarnos a él sin problemas y comenzar a ejecutar las tareas que necesitemos allí.
Servidor SSH vs Servidor FTP
Ya conocemos SSH, ¿pero qué es FTP? Su nombre viene de File Transfer Protocol, y por supuesto se trata de un protocolo de transferencia de archivos. Nombre simple y efectivo, pero ojo, no debemos confundirlo con SFTP ya que se trata de distintos protocolos.
Para compararlo con SSH debemos adentrarnos un poco en la historia de FTP: es un protocolo que surgió cuando Internet ni siquiera era como lo conocemos hoy en día. La primera versión de FTP data de la década de 1970, y si bien con el correr de los años ha recibido algunas mejoras, su filosofía sigue siendo básicamente la misma: transferir archivos.
Cuando FTP fue creado no se tuvieron en cuenta algunas implicaciones de seguridad que se consideran imprescindibles hoy en día. El problema principal de FTP es que se envían datos como usuarios y claves al servidor en texto plano, de forma que si alguien intercepta esta transferencia puede robar los datos.
Las funciones de FTP son muy básicas: sirve solo para transferir archivos y realizar algunas acciones simples como modificar permisos, copiar, mover y borrar archivos/carpetas.
SSH como bien sabemos permite realizar todo este tipo de operaciones y muchas más que hemos descrito a lo largo del artículo. Y no podemos olvidarnos de otro detalle: es mucho más seguro que FTP ya que transfiere los datos en forma encriptada por defecto.
La seguridad de FTP se puede mejorar un poco, por ejemplo, al hacer uso de una conexión sobre SSL/TLS, pero aun así no llega a ser tan seguro como el SSH.
Igualmente para nuestra sorpresa, tras realizar una encuesta en Twitter a más de 100 usuarios, nos llevamos la sorpresa de que el SSH, a pesar de sus grandes beneficios de seguridad y opciones para manipular el sistema operativo respecto al FTP, sigue detrás de éste en popularidad:
Ventajas y desventajas del Servidor SSH
A continuación les mostramos una tabla comparativa y esquema sobre cuáles son las principales ventajas y desventajas del servidor SSH.
Característica | Ventajas | Desventajas |
Seguridad | Muy buena | |
Funciones | Muchas y variadas | |
Velocidad | No muy buena | |
Costo | Totalmente gratuito | |
Facilidad de uso | Fácil de usar | |
Interfaz | No posee interfaz gráfica |
Conclusión
Hoy le hemos dado un gran vistazo a uno de los protocolos más populares de Internet: SSH.
Hemos visto cuáles son sus principales ventajas y desventajas, sus funciones, las posibilidades que brinda, cómo trabaja en conjunto con otras herramientas y lo seguro que resulta ser gracias a sus distintos tipos de encriptación.
Si buscas cifrar la información y tener un protocolo de comunicación seguro, entonces has elegido bien, SSH es la mejor opción.
¿Buscas un Servidor SSH seguro y estable ? ?
➡ Mira nuestros Planes de Cloud Hosting y Hosting Dedicado de alto rendimiento