Entendiendo y ejecutando el comando Linux/Unix: sshd

Entendiendo y ejecutando el comando Linux/Unix: sshd

Entendiendo y ejecutando el comando Linux/Unix: sshd

VALORACIÓN DEL ARTÍCULO:
5/5


sshd (SSH Daemon) es el programa daemon para ssh(1). Juntos, estos programas reemplazan rlogin y rsh , y proporcionan comunicaciones cifradas seguras entre dos hosts no confiables a través de una red insegura. Los programas están diseñados para ser tan fáciles de instalar y usar como sea posible.

sshd es el demonio que escucha las conexiones de los clientes. Normalmente se inicia al arrancar desde /etc/ rc Se bifurca un nuevo demonio para cada conexión entrante. Los demonios bifurcados se encargan del intercambio de claves, cifrado, autenticación, ejecución de comandos e intercambio de datos. Esta implementación de sshd soporta tanto la versión 1 como la 2 del protocolo SSH simultáneamente.

Índice de contenidos

Protocolo SSH Versión 1

Cada host tiene una clave RSA específica del host (normalmente 1024 bits) que se utiliza para identificar al host. Además, cuando el demonio se inicia, genera una clave RSA del servidor (normalmente 768 bits). Esta clave se regenera normalmente cada hora si se ha utilizado, y nunca se almacena en el disco.

Cada vez que un cliente se conecta, el demonio responde con sus claves de servidor y host público. El cliente compara la clave del host RSA con su propia base de datos para verificar que no ha cambiado. El cliente genera entonces un número aleatorio de 256 bits. Cifra este número aleatorio utilizando tanto la clave del host como la clave del servidor y envía el número cifrado al servidor. Ambas partes utilizan este número aleatorio como clave de sesión que se utiliza para cifrar todas las demás comunicaciones de la sesión. El resto de la sesión se cifra mediante un cifrado convencional, actualmente Blowfish o 3DES, y 3DES se utiliza de forma predeterminada. El cliente selecciona el algoritmo de encriptación a utilizar entre los ofrecidos por el servidor.

A continuación, el servidor y el cliente entran en un diálogo de autenticación. El cliente intenta autenticarse a sí mismo utilizando la autenticación.rhosts, la autenticación.rhosts combinada con la autenticación de host RSA, la autenticación RSA challenge-response o la autenticación basada en contraseña.

La autenticación de los Rhosts se desactiva normalmente porque es fundamentalmente insegura, pero se puede activar en el archivo de configuración del servidor si se desea. La seguridad del sistema no se mejora a menos que rshdrlogind y rexecd estén deshabilitados (por lo que se deshabilita completamente rlogin y rsh en la máquina).

Protocolo SSH Versión 2

La versión 2 funciona de manera similar: Cada host tiene una clave específica de host (RSA o DSA) que se utiliza para identificar al host. Sin embargo, cuando el demonio se inicia, no genera una clave de servidor. La seguridad a futuro se proporciona a través de un acuerdo de clave Diffie-Hellman. Este acuerdo clave da como resultado una clave de sesión compartida.

El resto de la sesión se cifra mediante un cifrado simétrico, actualmente AES de 128 bits, Blowfish, 3DES, CAST128, Arcfour, AES de 192 bits o AES de 256 bits. El cliente selecciona el algoritmo de encriptación a utilizar entre los ofrecidos por el servidor. Además, la integridad de la sesión se proporciona mediante un código de autenticación de mensaje criptográfico (hmac-sha1 o hmac-md5).

La versión 2 del protocolo proporciona un método de autenticación de usuario basado en clave pública (PubkeyAuthentication) o en host de cliente (HostbasedAuthentication), autenticación de contraseña convencional y métodos basados en respuesta a desafíos.

Ejecución de comandos y envío de datos

Si el cliente se autentica correctamente, se introduce un diálogo para preparar la sesión. En este momento, el cliente puede solicitar cosas como la asignación de un pseudo-tty, el reenvío de conexiones X11, el reenvío de conexiones TCP/IP o el reenvío de la conexión del agente de autenticación a través del canal seguro.

Finalmente, el cliente solicita una shell o la ejecución de un comando. Los lados entran en el modo de sesión. En este modo, cualquiera de las partes puede enviar datos en cualquier momento, y dichos datos se envían a/desde el shell o comando en el lado del servidor, y el terminal de usuario en el lado del cliente.

Cuando el programa de usuario termina y se cierran todas las conexiones X11 reenviadas y otras conexiones, el servidor envía el estado de salida de comandos al cliente y ambos lados salen.

sshd puede configurarse usando opciones de línea de comandos o un archivo de configuración. Las opciones de la línea de comandos invalidan los valores especificados en el archivo de configuración.

sshd relee su archivo de configuración cuando recibe una señal de cuelgue, SIGHUP ejecutándose con el nombre con el que se inició como, por ejemplo, /usr/sbin/sshd

Las opciones son las siguientes:

-b bits

Especifica el número de bits en la clave de servidor de la versión 1 del protocolo efímero (predeterminado 768).

-d

Modo de depuración. El servidor envía una salida de depuración verbosa al registro del sistema y no se pone a sí mismo en segundo plano. El servidor tampoco funcionará y sólo procesará una conexión. Esta opción sólo sirve para depurar el servidor. Múltiples opciones -d aumentan el nivel de depuración. El máximo es 3.

-e

Cuando se especifica esta opción, sshd enviará la salida al error estándar en lugar del registro del sistema.

-f archivo_de_configuración

Especifica el nombre del archivo de configuración. El valor por defecto es /etc/ssh/sshd_config sshd se niega a arrancar si no hay archivo de configuración.

-g login_grace_time

Da el tiempo de gracia para que los clientes se autenticen (por defecto 120 segundos). Si el cliente no logra autenticar al usuario en estos segundos, el servidor se desconecta y sale. Un valor de cero indica que no hay límite.

-h host_key_file

Especifica un archivo desde el que se lee una clave del host. Esta opción debe darse si sshd no se ejecuta como root (ya que los archivos de clave del host normal no son normalmente legibles por nadie más que por root). El valor por defecto es /etc/ssh/ssh_host_key para la versión de protocolo 1, y /etc/ssh/ssh_host_rsa_key y /etc/ssh/ssh/ssh_host_host_dsa_key para la versión de protocolo 2. Es posible tener varios archivos de clave de host para las diferentes versiones de protocolo y algoritmos de clave de host.

-i

Especifica que sshd se está ejecutando desde inetd. sshd normalmente no se ejecuta desde inetd porque necesita generar la clave del servidor antes de que pueda responder al cliente, y esto puede llevar decenas de segundos. Los clientes tendrían que esperar demasiado tiempo si la clave se regenerara cada vez. Sin embargo, con tamaños de clave pequeños (por ejemplo, 512) puede ser factible utilizar sshd de inetd.

-k key_gen_time

Especifica la frecuencia con la que se regenera la clave del servidor de la versión 1 del protocolo efímero (valor predeterminado: 3600 segundos o una hora). La motivación para regenerar la clave bastante a menudo es que la clave no se almacena en ninguna parte, y después de aproximadamente una hora, se hace imposible recuperar la clave para descifrar las comunicaciones interceptadas, incluso si la máquina se ha roto o se ha confiscado físicamente. Un valor cero indica que la clave nunca será regenerada.

-o opción

Puede usarse para dar opciones en el formato utilizado en el archivo de configuración. Esto es útil para especificar opciones para las que no hay un indicador de línea de comandos separado.

-p port

Especifica el puerto en el que el servidor escucha las conexiones (predeterminado 22). Se permiten múltiples opciones de puertos. Los puertos especificados en el archivo de configuración se ignoran cuando se especifica un puerto de línea de comandos.

-q

Modo silencioso. No se envía nada al log del sistema. Normalmente se registran el inicio, la autenticación y la finalización de cada conexión.

-t

Modo de prueba. Compruebe únicamente la validez del archivo de configuración y la integridad de las claves. Esto es útil para actualizar sshd de forma fiable ya que las opciones de configuración pueden cambiar.

-u len

Esta opción se utiliza para especificar el tamaño del campo en la estructura utmp que contiene el nombre de host remoto. Si el nombre de host resuelto es más largo que len, se utilizará en su lugar el valor decimal punteado. Esto permite que los hosts con nombres de host muy largos que desbordan este campo puedan ser identificados de forma única. Especificar – u0 indica que sólo las direcciones decimales punteadas deben ser puestas en el archivo utmp. – u0 también se utiliza para evitar que sshd realice solicitudes DNS a menos que el mecanismo de autenticación o la configuración lo requiera. Los mecanismos de autenticación que pueden requerir DNS incluyen RhostsAuthenticationRhostsRSAAuthentication HostbasedAuthentication y el uso de una opción desde=pattern-list en un archivo de clave. Las opciones de configuración que requieren DNS incluyen el uso de un patrón USER@HOST en AllowUsers o DenyUsers

-D

Cuando se especifica esta opción sshd no se separará y no se convertirá en un demonio. Esto permite una fácil monitorización de sshd

-4

Forza sshd a usar sólo direcciones IPv4.

-6

Forza sshd a usar sólo direcciones IPv6.

Archivo de configuración

sshd lee los datos de configuración de /etc/ssh/sshd_config (o el archivo especificado con – f en la línea de comandos). El formato de archivo y las opciones de configuración se describen en sshd_config5.

Proceso de inicio de sesión

Cuando un usuario inicia sesión correctamente, sshd hace lo siguiente:

  1. Si el inicio de sesión está en una tty, y no se ha especificado ningún comando, imprime la última hora de inicio de sesión y /etc/motd (a menos que lo impida el archivo de configuración o $HOME/.hushlogin, consulte la sección FICHEROS Sx).
  2. Si el inicio de sesión está en una tty, registra el tiempo de inicio de sesión.
  3. Comprueba /etc/nologin si existe, imprime contenidos y sale (a menos que sea root).
  4. Cambios para ejecutar con privilegios de usuario normales.
  5. Configura el entorno básico.
  6. Lee $HOME/.ssh/environment si existe y los usuarios pueden cambiar su entorno. Consulte la opción PermitUserEnvironment en sshd_config5.
  7. Cambios en el directorio raíz del usuario.
  8. Si $HOME/.ssh/rc existe, lo ejecuta; de lo contrario, si /etc/ssh/ssh/sshrc existe, lo ejecuta; de lo contrario, ejecuta xauth. Los archivos «rc»’ reciben el protocolo de autenticación X11 y la cookie en entrada estándar.
  9. Ejecuta el shell o comando del usuario.

Formato de archivo Authorized_Keys

$HOME/.ssh/authorized_keys es el archivo predeterminado que enumera las claves públicas permitidas para la autenticación RSA en la versión de protocolo 1 y para la autenticación de clave pública (PubkeyAuthentication) en la versión de protocolo 2. Se puede utilizar AuthorizedKeysFile para especificar un archivo alternativo.

Cada línea del archivo contiene una clave (las líneas vacías y las que empiezan con un `#’ se ignoran como comentarios). Cada clave pública RSA consta de los siguientes campos, separados por espacios: opciones, bits, exponente, módulo, comentario. Cada clave pública de la versión 2 del protocolo consta de: opciones, tipo de clave, clave codificada base64, comentario. El campo de opciones es opcional; su presencia viene determinada por si la línea comienza con un número o no (el campo de opciones nunca comienza con un número). Los campos de bits, exponente, módulo y comentario dan la clave RSA para la versión de protocolo 1; el campo de comentario no se utiliza para nada (pero puede ser conveniente para que el usuario identifique la clave). Para la versión de protocolo 2 el tipo de clave es «`ssh-dss» o «ssh-rsa»

Tenga en cuenta que las líneas de este archivo suelen tener varios cientos de bytes de longitud (debido al tamaño de la codificación de la clave pública). No desea escribirlos; en su lugar, copie el identificador.pub id_dsa.pub o el archivo id_rsa.pub y edítelo.

sshd hace cumplir un tamaño mínimo de módulo de clave RSA para las claves de protocolo 1 y 2 de 768 bits.

Las opciones (si las hay) consisten en especificaciones de opciones separadas por comas. No se permiten espacios, excepto entre comillas dobles. Se admiten las siguientes especificaciones de opción (tenga en cuenta que las palabras clave de opción no distinguen entre mayúsculas y minúsculas):

from=pattern-list

Especifica que además de la autenticación de clave pública, el nombre canónico del host remoto debe estar presente en la lista de patrones separados por comas («*» y «*» sirven como comodines). La lista también puede contener patrones negados prefijándolos con `!’ ; si el nombre de host canónico coincide con un patrón negado, la clave no es aceptada. El propósito de esta opción es aumentar opcionalmente la seguridad: la autenticación de la clave pública por sí misma no confía en la red ni en los servidores de nombres ni en nada (excepto en la clave); sin embargo, si alguien roba la clave de alguna manera, la clave permite que un intruso inicie sesión desde cualquier parte del mundo. Esta opción adicional dificulta el uso de una clave robada (los servidores de nombres y/o enrutadores tendrían que estar en peligro además de la clave).

command=command

Especifica que el comando se ejecuta cada vez que se utiliza esta clave para la autenticación. El comando suministrado por el usuario (si existe) es ignorado. El comando se ejecuta en una pty si el cliente solicita una pty; de lo contrario, se ejecuta sin una tty. Si se requiere un canal limpio de 8 bits, no se debe solicitar una pty o se debe especificar no-pty Se puede incluir una cita en el comando citándola con una barra invertida. Esta opción puede ser útil para restringir ciertas claves públicas para realizar sólo una operación específica. Un ejemplo podría ser una llave que permite realizar copias de seguridad remotas, pero nada más. Tenga en cuenta que el cliente puede especificar el reenvío TCP/IP y/o X11 a menos que estén explícitamente prohibidos. Tenga en cuenta que esta opción se aplica a la ejecución de shell, comando o subsistema.

environment=NAME=valor

Especifica que la cadena debe añadirse al entorno cuando se inicia sesión utilizando esta clave. Las variables de entorno establecidas de esta forma sustituyen a otros valores de entorno predeterminados. Se permiten múltiples opciones de este tipo. Medio ambiente

TAMBIÉN TE INTERESA

impacto-a-la-IA-Generativa-en-el-cloud-privado

El impacto de la IA Generativa en el Cloud Privado

En este artículo indagamos sobre un término que está muy de moda en estos días: la IA Generativa. Además de describir qué y cuál es su potencial, lo vamos a relacionar con el Cloud Privado, ya que estos entornos pueden dar un gran paso adelante gracias a la capacidad de procesamiento y generación de datos

recetas-de-postres

Conviértete en todo un chef con las recetas de cocina de Alexa

El famoso asistente de voz de Amazon puede hacer casi de todo lo que le pidas, incluidas las recetas de cocina de Alexa. Tras cinco años de vida en España, algo más en Estados Unidos, los datos que maneja la compañía indican que muchas personas recurren a Alexa como su ayudante en la cocina, ya

videos-TikTok

TikTok vs. Google: la red social planta cara al buscador rey

Las búsquedas en Internet viven su particular Juego de Tronos. Google siempre ha estado sentado en el Trono de Hierro pero cada vez más familias están pujando por destronar al rey. Sin duda, Microsoft se ha postulado como un digno rival con su navegador Edge y la puesta en marcha de la IA en esta

Zoom-Workplace

Zoom Workplace, la plataforma de trabajo que ha ideado Zoom con base en la IA

En cuestión de cuatro años, Zoom ha pasado de ser una gran desconocida a toda una referencia en el mundo de las comunicaciones. De emerger como herramienta de videollamadas en la pandemia, hoy Zoom se ha convertido en toda una solución multiusos para la vida diaria y el trabajo, cuya culminación se ha traducido con