sshd — Demonio OpenSSH
SINOPSIS
sshd [-46DdeGiqTtV] [-C especificación_de_conexión] [-c archivo_de_certificado_de_host] [-E archivo_de_registro]
[-f archivo_de_configuración] [-g tiempo_de_espera_de_inicio_de_sesión] [-h archivo_de_clave_de_host] [-o opción] [-p puerto] [-u longitud]
DESCRIPCIÓN
sshd (Demonio OpenSSH) es el programa de demonio para ssh(1). Proporciona comunicaciones seguras y cifradas entre dos hosts no confiables a través de una red insegura.
sshd escucha las conexiones de los clientes. Normalmente se inicia al arrancar desde /etc/init.d/ssh.
Crea un nuevo demonio para cada conexión entrante. Los demonios creados gestionan el intercambio de claves, el cifrado, la autenticación, la ejecución de comandos y el intercambio de datos.
sshd se puede configurar utilizando opciones de línea de comandos o un archivo de configuración (por defecto
sshd_config(5)); las opciones de línea de comandos anulan los valores especificados en el archivo de configuración. sshd
vuelve a leer su archivo de configuración cuando recibe una señal de colgar, SIGHUP, ejecutándose a sí mismo con
el nombre y las opciones con las que se inició, por ejemplo, /usr/sbin/sshd.
Las opciones son las siguientes:
-4 Fuerza a sshd a utilizar solo direcciones IPv4.
-6 Fuerza a sshd a utilizar solo direcciones IPv6.
-C especificación_de_conexión
Especifica los parámetros de conexión que se utilizarán para el modo de prueba extendido -T. Si se proporciona, se aplican los directivos Match en el archivo de configuración que serían aplicables antes de que la configuración se escriba en la salida estándar. Los parámetros de conexión se proporcionan como pares clave=valor y pueden proporcionarse en cualquier orden, ya sea con múltiples opciones -C o como una lista separada por comas. Las claves son "addr", "user", "host", "laddr", "lport" y "rdomain" y corresponden a la dirección de origen, el usuario, el nombre de host de origen resuelto, la dirección local, el puerto local y el dominio de enrutamiento respectivamente. Además, se puede especificar la bandera "invalid-user" (que no acepta un argumento de valor) para simular una conexión desde un nombre de usuario no reconocido.
-c archivo_de_certificado_de_host
Especifica una ruta a un archivo de certificado para identificar a sshd durante el intercambio de claves. El archivo de certificado debe coincidir con un archivo de clave de host especificado utilizando la opción -h o la directiva de configuración HostKey.
-D Cuando se especifica esta opción, sshd no se separa y no se convierte en un demonio. Esto
permite una fácil supervisión de sshd.
-d Modo de depuración. El servidor envía una salida de depuración detallada a la salida de error estándar y no se ejecuta en segundo plano. El servidor tampoco realizará una bifurcación (fork(2)) y solo procesará una
conexión. Esta opción solo está pensada para la depuración del servidor. Múltiples opciones -d aumentan el nivel de depuración. El máximo es 3.
-E archivo_registro
Añade los registros de depuración al archivo de registro especificado en lugar del registro del sistema.
-e
Escribe los registros de depuración a la salida de error estándar en lugar del registro del sistema.
-f archivo_configuración
Especifica el nombre del archivo de configuración. El valor predeterminado es /etc/ssh/sshd_config. sshd se niega a iniciarse si no hay ningún archivo de configuración.
-G
Analiza e imprime el archivo de configuración. Comprueba la validez del archivo de configuración, imprime la configuración efectiva en la salida estándar y, a continuación, sale. Opcionalmente, las reglas Match se pueden aplicar especificando los parámetros de conexión utilizando una o más opciones -C.
-g tiempo_limite_inicio_sesión
Establece el tiempo de espera para que los clientes se autentiquen (el valor predeterminado es 120 segundos). Si el cliente no se autentica en el tiempo especificado, el servidor se desconecta y sale. Un valor de cero indica que no hay límite.
-h archivo_clave_host
Especifica un archivo desde el que se lee una clave de host. Esta opción debe proporcionarse si sshd no se ejecuta como root (ya que los archivos de clave de host normales no suelen ser legibles por nadie que no sea root). El valor predeterminado es /etc/ssh/ssh_host_ecdsa_key, /etc/ssh/ssh_host_ed25519_key y /etc/ssh/ssh_host_rsa_key. Es posible tener varios archivos de clave de host para los diferentes algoritmos de clave de host.
-i
Especifica que sshd se está ejecutando desde inetd(8).
-o opción
Se puede utilizar para proporcionar opciones en el formato utilizado en el archivo de configuración. Esto es útil para especificar opciones para las que no hay una opción de línea de comandos independiente. Para obtener más detalles sobre las opciones y sus valores, consulte sshd_config(5).
-p puerto
Especifica el puerto en el que el servidor escucha las conexiones (el valor predeterminado es 22). Se permiten varias opciones de puerto. Los puertos especificados en el archivo de configuración con la opción Port se ignoran cuando se especifica un puerto en la línea de comandos. Los puertos especificados mediante la opción ListenAddress anulan los puertos de la línea de comandos.
-q
Modo silencioso. No se envía nada al registro del sistema. Normalmente, se registra el inicio, la autenticación y la finalización de cada conexión.
-T
Modo de prueba ampliado. Comprueba la validez del archivo de configuración, imprime la configuración efectiva en la salida estándar y, a continuación, sale. Opcionalmente, las reglas Match se pueden aplicar especificando los parámetros de conexión utilizando una o más opciones -C. Esto es similar a la opción -G, pero incluye las pruebas adicionales que se realizan con la opción -t.
-t
Modo de prueba. Solo comprueba la validez del archivo de configuración y la corrección de las claves. Esto es útil para actualizar sshd de forma fiable, ya que las opciones de configuración pueden cambiar.
-u longitud
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 la longitud, se utilizará el valor decimal con puntos en su lugar. Esto permite que los hosts con nombres de host muy largos que desbordan este campo sigan siendo identificados de forma única. Especificar -u0 indica que solo se deben colocar direcciones decimales con puntos en el archivo utmp. -u0 también se puede utilizar para evitar que sshd realice solicitudes DNS a menos que el mecanismo de autenticación o la configuración lo requieran. Los mecanismos de autenticación que pueden requerir DNS incluyen HostbasedAuthentication y el uso de una opción from="lista-de-patrones" 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.
-V Muestra el número de versión y sale.
AUTENTICACIÓN
El demonio SSH de OpenSSH solo admite el protocolo SSH 2. Cada host tiene una clave específica del host, que se utiliza para identificar el host. Cada vez que un cliente se conecta, el demonio responde con su clave pública del host. El cliente compara la clave del host con su propia base de datos para verificar que no haya cambiado.
El secreto directo se proporciona a través de un acuerdo de clave Diffie-Hellman. Este acuerdo de clave da como resultado una clave de sesión compartida. El resto de la sesión se cifra utilizando un cifrado simétrico. El cliente selecciona el algoritmo de cifrado que se utilizará de los que ofrece el servidor. Además, la integridad de la sesión se proporciona a través de un código de autenticación de mensajes criptográfico (MAC).
Finalmente, el servidor y el cliente entran en un diálogo de autenticación. El cliente intenta autenticarse utilizando la autenticación basada en host, la autenticación de clave pública, la autenticación de desafío-respuesta o la autenticación con contraseña.
Independientemente del tipo de autenticación, se verifica la cuenta para garantizar que sea accesible. Una cuenta no es accesible si está bloqueada, aparece en DenyUsers o su grupo aparece en DenyGroups. La definición de una cuenta bloqueada depende del sistema. Algunas plataformas tienen su propia base de datos de cuentas (por ejemplo, AIX) y otras modifican el campo passwd ('*LK*' en Solaris y UnixWare, '*' en HP-UX, que contiene 'Nologin' en Tru64, un prefijo '*LOCKED*' en FreeBSD y un prefijo '!' en la mayoría de las distribuciones de Linux). Si existe un requisito para deshabilitar la autenticación con contraseña para la cuenta, pero aún permitir la autenticación de clave pública, el campo passwd debe establecerse en algo diferente a estos valores (por ejemplo, 'NP' o '*NP*').
Si el cliente se autentica correctamente, se inicia 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 o el reenvío de la conexión del agente de autenticación a través del canal seguro.
Después de esto, el cliente solicita una shell interactiva o la ejecución de un comando no interactivo, que sshd ejecutará a través de la shell del usuario utilizando su opción -c. Luego, ambos lados entran en modo de sesión. En este modo, cualquiera de los lados puede enviar datos en cualquier momento, y esos datos se reenvían a/desde la shell o el comando en el lado del servidor y la terminal del usuario en el lado del cliente.
Cuando el programa de usuario termina y se cierran todas las conexiones X11 y otras conexiones reenviadas, el servidor envía el estado de salida del comando al cliente y ambos lados salen.
PROCESO DE INICIO DE SESIÓN
Cuando un usuario inicia sesión correctamente, sshd hace lo siguiente:
Si el inicio de sesión es en un tty y no se ha especificado un comando, imprime la última hora de inicio de sesión
y /etc/motd (a menos que se impida en el archivo de configuración o mediante ~/.hushlogin; consulte la
sección “ARCHIVOS”).
Si el inicio de sesión es en un tty, registra la hora de inicio de sesión.
Verifica /etc/nologin; si existe, imprime su contenido y se cierra (a menos que sea el usuario root).
Cambia a ejecutar con los privilegios de usuario normales.
Establece el entorno básico.
Lee el archivo ~/.ssh/environment, si existe, y se permite a los usuarios cambiar su
entorno. Consulte la opción PermitUserEnvironment en sshd_config(5).
Cambia al directorio de inicio del usuario.
Si ~/.ssh/rc existe y la opción PermitUserRC en sshd_config(5) está configurada, lo ejecuta; de lo contrario,
si /etc/ssh/sshrc existe, lo ejecuta; de lo contrario, ejecuta xauth(1). Los archivos “rc” reciben el protocolo X11 y la cookie en la entrada estándar. Consulte “SSHRC”, a continuación.
Ejecuta el shell o comando del usuario. Todos los comandos se ejecutan bajo el shell de inicio de sesión del usuario, tal como
se especifica en la base de datos de contraseñas del sistema.
SSHRC
Si el archivo ~/.ssh/rc existe, sh(1) lo ejecuta después de leer los archivos de entorno, pero antes de iniciar el shell o comando del usuario. No debe producir ninguna salida en stdout; en su lugar, se debe usar stderr. Si la redirección X11 está en uso, recibirá el par "proto cookie" en su entrada estándar (y DISPLAY en su entorno). El script debe llamar a xauth(1) porque sshd no ejecutará xauth automáticamente para agregar las cookies X11.
El propósito principal de este archivo es ejecutar cualquier rutina de inicialización que pueda ser necesaria antes de que el directorio de inicio del usuario sea accesible; AFS es un ejemplo particular de este tipo de entorno.
Este archivo probablemente contendrá algún código de inicialización seguido de algo similar a:
if read proto cookie && [ -n "$DISPLAY" ]; then
if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
# X11UseLocalhost=yes
echo add unix:`echo $DISPLAY |
cut -c11-` $proto $cookie
else
# X11UseLocalhost=no
echo add $DISPLAY $proto $cookie
fi | xauth -q fi
Si este archivo no existe, se ejecuta /etc/ssh/sshrc, y si este tampoco existe, se utiliza xauth para agregar la cookie.
FORMATO DE ARCHIVO AUTHORIZED_KEYS
AuthorizedKeysFile especifica los archivos que contienen las claves públicas para la autenticación de clave pública; si
esta opción no está especificada, el valor predeterminado es ~/.ssh/authorized_keys y ~/.ssh/authorized_keys2.
Cada línea del archivo contiene una clave (se ignoran las líneas vacías y las líneas que comienzan con ‘#’ como comentarios). Las claves públicas consisten en los siguientes campos separados por espacios: opciones, tipo de clave, clave codificada en base64, comentario. El campo de opciones es opcional. Los tipos de clave admitidos son:
_
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
_
ssh-ed25519
ssh-rsa
El campo de comentario no se utiliza para nada (pero puede ser conveniente para que el usuario identifique la clave).
Tenga en cuenta que las líneas de este archivo pueden tener varios cientos de bytes de largo (debido al tamaño de la codificación de la clave pública) hasta un límite de 8 kilobytes, lo que permite claves RSA de hasta 16 kilobits. No querrá escribirlas; en su lugar, copie los archivos id_ecdsa.pub, id_ecdsa_sk.pub, id_ed25519.pub, id_ed25519_sk.pub o id_rsa.pub y edítelos.
sshd impone un tamaño mínimo de módulo de clave RSA de 1024 bits.
Las opciones (si están presentes) consisten en especificaciones de opciones separadas por comas. No se permiten espacios, excepto dentro de las comillas dobles. Las siguientes especificaciones de opciones son compatibles (tenga en cuenta que las palabras clave de las opciones no distinguen entre mayúsculas y minúsculas):
agent-forwarding
Habilita el reenvío del agente de autenticación previamente deshabilitado por la opción restrict.
cert-authority
Especifica que la clave listada es una autoridad de certificación (CA) en la que se confía para validar certificados firmados para la autenticación del usuario.
Los certificados pueden codificar restricciones de acceso similares a estas opciones de clave. Si tanto las restricciones del certificado como las opciones de clave están presentes, se aplica la unión más restrictiva de las dos.
command="comando"
Especifica que el comando se ejecuta cada vez que esta clave se utiliza para la autenticación. El comando suministrado por el usuario (si lo hay) se ignora. El comando se ejecuta en un pty si el cliente solicita un pty; de lo contrario, se ejecuta sin un tty. Si se requiere un canal limpio de 8 bits, no se debe solicitar un pty o se debe especificar no-pty. Se puede incluir una comilla en el comando si se cita con una barra diagonal invertida.
Esta opción podría ser útil para restringir ciertas claves públicas para que realicen solo una operación específica. Un ejemplo podría ser una clave que permita copias de seguridad remotas pero nada más. Tenga en cuenta que el cliente puede especificar el reenvío de TCP y/o X11 a menos que se prohíba explícitamente, por ejemplo, mediante la opción de clave restrict.
El comando suministrado originalmente por el cliente está disponible en la variable de entorno SSH_ORIGINAL_COMMAND. Tenga en cuenta que esta opción se aplica a la ejecución de shell, comando o subsistema. Tenga en cuenta también que este comando puede ser reemplazado por una directiva ForceCommand de sshd_config(5).
Si se especifica un comando y un comando forzado está integrado en un certificado utilizado para la autenticación, entonces el certificado solo se aceptará si los dos comandos son idénticos.
environment="NOMBRE=valor"
Especifica que la cadena se agregará al entorno al iniciar sesión con esta clave. Las variables de entorno configuradas de esta manera anulan otros valores de entorno predeterminados. Se permiten múltiples opciones de este tipo. El procesamiento del entorno está deshabilitado de forma predeterminada y se controla a través de la opción PermitUserEnvironment.
expiry-time="timespec"
Especifica una hora después de la cual la clave no se aceptará. La hora puede especificarse como una fecha YYYYMMDD[Z] o una hora YYYYMMDDHHMM[SS][Z]. Las fechas y horas se interpretarán en la zona horaria del sistema a menos que se adjunten con un carácter Z, en cuyo caso se interpretarán en la zona horaria UTC.
from="lista-de-patrones"
Especifica que, además de la autenticación por clave pública, ya sea el nombre canónico del host remoto o su dirección IP deben estar presentes en la lista separada por comas de patrones. Consulte la sección PATTERNS en ssh_config(5) para obtener más información sobre los patrones.
Además de la coincidencia de comodines que se puede aplicar a los nombres de host o direcciones, una sección "from" puede coincidir con direcciones IP utilizando la notación de dirección/longitud de máscara CIDR.
El propósito de esta opción es aumentar opcionalmente la seguridad: la autenticación por clave pública por sí sola no confía en la red ni en los servidores de nombres ni en nada (excepto en la clave); sin embargo, si alguien de alguna manera roba la clave, la clave permite a un intruso iniciar sesión desde cualquier lugar del mundo. Esta opción adicional dificulta el uso de una clave robada (los servidores de nombres y/o los enrutadores también tendrían que verse comprometidos, además de la clave).
no-agent-forwarding
Prohíbe el reenvío del agente de autenticación cuando esta clave se utiliza para la autenticación.
no-port-forwarding
Prohíbe el reenvío de TCP cuando esta clave se utiliza para la autenticación. Cualquier solicitud de reenvío de puertos del cliente devolverá un error. Esto podría utilizarse, por ejemplo, en conexión con la opción command.
no-pty
Impide la asignación de tty (una solicitud para asignar una tty fallará).
no-user-rc
Deshabilita la ejecución de ~/.ssh/rc.
no-X11-forwarding
Prohíbe el reenvío de X11 cuando esta clave se utiliza para la autenticación. Cualquier solicitud de reenvío de X11 del cliente devolverá un error.
permitlisten="[host:]puerto"
Limita el reenvío de puertos remotos con la opción ssh(1) -R para que solo pueda escuchar en el host (opcional) y puerto especificados. Las direcciones IPv6 se pueden especificar encerrando la dirección entre corchetes. Se pueden aplicar varias opciones permitlisten separadas por comas. Los nombres de host pueden incluir comodines según se describe en la sección PATTERNS en ssh_config(5). Una especificación de puerto de * coincide con cualquier puerto. Tenga en cuenta que la configuración de GatewayPorts puede restringir aún más las direcciones de escucha. Tenga en cuenta que ssh(1) enviará un nombre de host de "localhost" si no se especificó un host de escucha cuando se solicitó el reenvío, y que este nombre se trata de manera diferente a las direcciones explícitas de localhost "127.0.0.1" y "::1".
permitopen="host:puerto"
Limita el reenvío de puertos locales con la opción ssh(1) -L para que solo pueda conectarse al host y puerto especificados. Las direcciones IPv6 se pueden especificar encerrando la dirección entre corchetes. Se pueden aplicar varias opciones permitopen separadas por comas. No se realiza ninguna coincidencia de patrones ni búsqueda de nombres en los nombres de host especificados; deben ser nombres de host y/o direcciones literales. Una especificación de puerto de * coincide con cualquier puerto.
port-forwarding
Habilita el reenvío de puertos que se deshabilitó anteriormente con la opción restrict.
principals="principals"
En una línea de autoridad de certificación, especifica los principales permitidos para la autenticación de certificados como una lista separada por comas. Al menos un nombre de la lista debe aparecer en la lista de principales del certificado para que el certificado sea aceptado. Esta opción se ignora para las claves que no están marcadas como firmantes de certificados de confianza que utilizan la opción cert-authority.
pty Permite la asignación de tty previamente deshabilitada por la opción restrict.
no-touch-required
No requiere la demostración de la presencia del usuario para las firmas realizadas con esta clave. Esta opción solo tiene sentido para los algoritmos de autenticador FIDO ecdsa-sk y ed25519-sk.
verify-required
Requiere que las firmas realizadas con esta clave atestigüen que verificaron al usuario, por ejemplo, mediante un PIN. Esta opción solo tiene sentido para los algoritmos de autenticador FIDO ecdsa-sk y ed25519-sk.
restrict
Habilita todas las restricciones, es decir, deshabilita el reenvío de puertos, agentes y X11, así como deshabilitando la asignación de PTY y la ejecución de ~/.ssh/rc. Si se agregan capacidades de restricción futuras a los archivos authorized_keys, se incluirán en este conjunto.
tunnel="n"
Fuerza un dispositivo tun(4) en el servidor. Sin esta opción, el siguiente dispositivo disponible se utilizará si el cliente solicita un túnel.
user-rc
Habilita la ejecución de ~/.ssh/rc previamente deshabilitada por la opción restrict.
X11-forwarding
Permite el reenvío de X11 previamente deshabilitado por la opción restrict.
Un ejemplo de archivo authorized_keys:
# Los comentarios están permitidos al principio de la línea. Las líneas en blanco están permitidas.
# Clave simple, sin restricciones
ssh-rsa ...
# Comando forzado, deshabilitar PTY y todo el reenvío
restrict,command="dump /home" ssh-rsa ...
# Restricción de los destinos de reenvío ssh -L
permitopen="192.0.2.1:80",permitopen="192.0.2.2:25" ssh-rsa ...
# Restricción de los oyentes de reenvío ssh -R
permitlisten="localhost:8080",permitlisten="[::1]:22000" ssh-rsa ...
# Configuración para el reenvío de túnel
tunnel="0",command="sh /etc/netstart tun0" ssh-rsa ...
# Anulación de la restricción para permitir la asignación de PTY
restrict,pty,command="nethack" ssh-rsa ...
# Permitir la clave FIDO sin requerir contacto
no-touch-required _ ...
# Requerir la verificación del usuario (por ejemplo, PIN o datos biométricos) para la clave FIDO
verify-required _ ...
# Clave de CA de confianza, permitir contacto nulo para FIDO si se solicita en el certificado
cert-authority,no-touch-required,principals="user_a" ssh-rsa ...
FORMATO DE ARCHIVO SSH_KNOWN_HOSTS
Los archivos /etc/ssh/ssh_known_hosts y ~/.ssh/known_hosts contienen las claves públicas de los hosts conocidos. El archivo global debe ser preparado por el administrador (opcional) y el archivo por usuario se mantiene automáticamente: cada vez que el usuario se conecta a un host desconocido, su clave se agrega al archivo por usuario.
Cada línea en estos archivos contiene los siguientes campos: marcador (opcional), nombres de host, tipo de clave, clave codificada en Base64, comentario. Los campos están separados por espacios.
El marcador es opcional, pero si está presente, debe ser uno de "@cert-authority" para indicar que la línea contiene una clave de autoridad de certificación (CA) o "@revoked" para indicar que la clave contenida en la línea está revocada y nunca debe aceptarse. Solo se debe usar un marcador en una línea de clave.
Hostnames es una lista separada por comas de patrones ('*' y '?' actúan como comodines); cada patrón se compara a su vez con el nombre de host. Cuando sshd está autenticando un cliente, como cuando se utiliza HostbasedAuthentication, este será el nombre de host canónico del cliente. Cuando ssh(1) está autenticando un servidor, este será el nombre de host proporcionado por el usuario, el valor de ssh(1) HostkeyAlias si se especificó, o el nombre de host canónico del servidor si se utilizó la opción ssh(1) CanonicalizeHostname.
Un patrón también puede precederse de '!' para indicar negación: si el nombre de host coincide con un patrón negado, no se acepta (por esa línea), incluso si coincidió con otro patrón en la línea. Un nombre de host o dirección puede estar opcionalmente encerrado entre corchetes '[' y ']' seguido de ':' y un número de puerto no estándar.
Alternativamente, los nombres de host pueden almacenarse en forma hash, lo que oculta los nombres de host y las direcciones en caso de que se divulgue el contenido del archivo. Los nombres de host hash comienzan con el carácter '|'. Solo puede aparecer un nombre de host hash en una sola línea y ninguno de los operadores de negación o comodín anteriores puede aplicarse.
El keytype y la clave codificada en base64 se toman directamente de la clave de host; se pueden obtener, por ejemplo, de /etc/ssh/ssh_host_rsa_key.pub. El campo de comentario opcional continúa hasta el final de la línea y no se utiliza.
Las líneas que comienzan con '#' y las líneas vacías se ignoran como comentarios.
Al realizar la autenticación del host, la autenticación se acepta si alguna línea coincidente tiene la clave correcta; ya sea una que coincida exactamente o, si el servidor ha presentado un certificado para la autenticación, la clave de la autoridad de certificación que firmó el certificado. Para que una clave se considere confiable como autoridad de certificación, debe utilizar el marcador "@cert-authority" descrito anteriormente.
El archivo de hosts conocidos también proporciona una función para marcar las claves como revocadas, por ejemplo, cuando se sabe que la clave privada asociada ha sido robada. Las claves revocadas se especifican incluyendo el marcador "@revoked" al principio de la línea de clave y nunca se aceptan para la autenticación o como autoridades de certificación, sino que, en cambio, producirán una advertencia de ssh(1) cuando se encuentren.
Es permisible (pero no recomendable) tener varias líneas o diferentes claves de host para los mismos nombres. Esto inevitablemente sucederá cuando se pongan en el archivo formas abreviadas de nombres de host de diferentes dominios. Es posible que los archivos contengan información conflictiva; la autenticación se acepta si se puede encontrar información válida de cualquiera de los archivos.
Tenga en cuenta que las líneas en estos archivos suelen tener cientos de caracteres de largo, y definitivamente no querrá escribir las claves de host a mano. En su lugar, générelas con un script, ssh-keyscan(1) o tomando, por ejemplo, /etc/ssh/ssh_host_rsa_key.pub y agregando los nombres de host al principio. ssh-keygen(1) también ofrece algunas ediciones automatizadas básicas para ~/.ssh/known_hosts, incluida la eliminación de hosts que coinciden con un nombre de host y la conversión de todos los nombres de host a sus representaciones hash.
Un ejemplo de archivo ssh_known_hosts:
# Se permiten comentarios al principio de la línea
cvs.example.net,192.0.2.10 ssh-rsa AAAA1234.....=
# Un nombre de host hash
|1|JfKTdBh7rNbXkVAQCRp4OQoPfmI=|USECr3SWf1JUPsms5AqfD5QfxkM= ssh-rsa
AAAA1234.....=
# Una clave revocada
@revoked * ssh-rsa AAAAB5W...
# Una clave de CA, aceptada para cualquier host en *.mydomain.com o *.mydomain.org
@cert-authority *.mydomain.org,*.mydomain.com ssh-rsa AAAAB5W...
ARCHIVOS
~/.hushlogin
Este archivo se utiliza para suprimir la impresión de la última hora de inicio de sesión y /etc/motd, si PrintLastLog y PrintMotd, respectivamente, están habilitados. No suprime la impresión del banner especificado por Banner.
~/.rhosts
Este archivo se utiliza para la autenticación basada en host (consulte ssh(1) para obtener más información). En algunas máquinas, este archivo puede necesitar ser legible por todo el mundo si el directorio de inicio del usuario está en una partición NFS, porque sshd lo lee como root. Además, este archivo debe ser propiedad del usuario y no debe tener permisos de escritura para nadie más. El permiso recomendado para la mayoría de las máquinas es de lectura/escritura para el usuario y no accesible para otros.
~/.shosts
Este archivo se utiliza exactamente de la misma manera que .rhosts, pero permite la autenticación basada en host sin permitir el inicio de sesión con rlogin/rsh.
~/.ssh/
Este directorio es la ubicación predeterminada para toda la información de configuración y autenticación específica del usuario. No hay ningún requisito general para mantener en secreto todo el contenido de este directorio, pero los permisos recomendados son de lectura/escritura/ejecución para el usuario y no accesible para otros.
~/.ssh/authorized_keys
Enumera las claves públicas (ECDSA, Ed25519, RSA) que se pueden utilizar para iniciar sesión como este usuario. El formato de este archivo se describe anteriormente. El contenido del archivo no es muy sensible, pero los permisos recomendados son de lectura/escritura para el usuario y no accesible para otros.
Si este archivo, el directorio \~/.ssh o el directorio de inicio del usuario son escribibles por otros usuarios, entonces el archivo podría ser modificado o reemplazado por usuarios no autorizados. En este caso, sshd no permitirá que se utilice a menos que la opción StrictModes se haya establecido en "no".
~/.ssh/environment
Este archivo se lee en el entorno al iniciar sesión (si existe). Solo puede contener líneas vacías, líneas de comentarios (que comienzan con '#') y líneas de asignación del formulario name=value. El archivo solo debe ser escribible por el usuario; no es necesario que sea legible para nadie. El procesamiento del entorno está deshabilitado de forma predeterminada y se controla mediante la opción PermitUserEnvironment.
~/.ssh/known_hosts
Contiene una lista de claves de host para todos los hosts en los que el usuario ha iniciado sesión y que no están ya en la lista de claves de host conocida a nivel de sistema. El formato de este archivo se describe anteriormente. Este archivo solo debe ser escribible por root/el propietario y puede, pero no es necesario, ser legible por todos.
~/.ssh/rc
Contiene rutinas de inicialización que se ejecutarán antes de que el directorio de inicio del usuario sea accesible. Este archivo solo debe ser escribible por el usuario, y no es necesario que sea legible por nadie.
/etc/hosts.allow
/etc/hosts.deny
Los controles de acceso que deben aplicarse mediante tcp-wrappers se definen aquí. Se proporcionan más detalles en hosts_access(5).
/etc/hosts.equiv
Este archivo se utiliza para la autenticación basada en host (consulte ssh(1)). Solo debe ser escribible por root.
/etc/ssh/moduli
Contiene los grupos Diffie-Hellman utilizados para el método de intercambio de claves "Diffie-Hellman Group Exchange". El formato del archivo se describe en moduli(5). Si no se encuentran grupos utilizables en este archivo, se utilizarán grupos internos fijos.
/etc/motd
Consulte motd(5).
/etc/nologin
Si este archivo existe, sshd se niega a permitir que nadie excepto root inicie sesión. El contenido del archivo se muestra a cualquiera que intente iniciar sesión y se rechazan las conexiones que no son de root. El archivo debe ser legible por todos.
/etc/ssh/shosts.equiv
Este archivo se utiliza exactamente de la misma manera que hosts.equiv, pero permite la autenticación basada en host sin permitir el inicio de sesión con rlogin/rsh.
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_rsa_key
Estos archivos contienen las partes privadas de las claves de host. Estos archivos solo deben ser propiedad de root, legibles solo por root y no accesibles para otros. Tenga en cuenta que sshd no se inicia si estos archivos son accesibles para el grupo/el mundo.
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key.pub
Estos archivos contienen las partes públicas de las claves de host. Estos archivos deben ser legibles por todos, pero solo escribibles por root. Su contenido debe coincidir con las respectivas partes privadas. Estos archivos no se utilizan realmente para nada; se proporcionan para la comodidad del usuario para que su contenido se pueda copiar en los archivos de hosts conocidos. Estos archivos se crean utilizando ssh-keygen(1).
/etc/ssh/ssh_known_hosts
Lista de claves de host conocidas a nivel de sistema. Este archivo debe ser preparado por el administrador del sistema para contener las claves de host públicas de todas las máquinas de la organización. El formato de este archivo se describe anteriormente. Este archivo solo debe ser escribible por root/el propietario y debe ser legible por todos.
/etc/ssh/sshd_config
Contiene datos de configuración para sshd. El formato del archivo y las opciones de configuración se describen en sshd_config(5).
/etc/ssh/sshrc
Similar a \~/.ssh/rc, se puede utilizar para especificar inicializaciones específicas de la máquina en el momento del inicio de sesión a nivel global. Este archivo solo debe ser escribible por root y debe ser legible por todos.
/run/sshd
Directorio utilizado por sshd durante la separación de privilegios en la fase previa a la autenticación. El directorio no debe contener ningún archivo y debe ser propiedad de root y no ser de escritura por el grupo o por otros usuarios.
/run/sshd.pid
Contiene el ID de proceso del sshd que está a la escucha de conexiones (si hay varios demonios en ejecución simultáneamente para diferentes puertos, esto contiene el ID de proceso del que se inició por última vez). El contenido de este archivo no es confidencial; puede ser legible para todos los usuarios.
VÉASE TAMBIÉN
scp(1), sftp(1), ssh(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), ssh-keyscan(1), chroot(2), hosts_access(5), moduli(5), sshd_config(5), inetd(8), sftp-server(8)
AUTORES
OpenSSH es un derivado de la versión original y gratuita de ssh 1.2.12 de Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt y Dug Song eliminaron muchos errores, volvieron a agregar funciones más nuevas y crearon OpenSSH. Markus Friedl contribuyó con el soporte para las versiones del protocolo SSH 1.5 y 2.0. Niels Provos y Markus Friedl contribuyeron con el soporte para la separación de privilegios.