¿Es posible hacer que OpenSSH registre la clave pública que se usó en la autenticación?

27

Tengo un sistema de producción donde varias personas diferentes pueden iniciar sesión en una sola cuenta: la cuenta es para la aplicación y no para la persona, ya que no tenemos cuentas personales en los servidores de producción.

Para fines de auditoría, quiero poder decir quién inició sesión a qué hora, y a medida que usamos las claves SSH para iniciar sesión, parece lógico rastrear eso (ya que no hay otro identificador para rastrear).

Cuando SSH autentica a un usuario, registra el nombre de usuario en el registro de seguridad del sistema, pero no registra cuál de las claves públicas autorizadas se utilizó en el inicio de sesión. ¿Es posible que OpenSSH también informe qué clave pública se utilizó? o tal vez solo el comentario asociado con esa clave?

El sistema operativo que se usa es CentOS 5.6, pero también me gustaría saber si es posible en otros sistemas operativos.

Guss
fuente

Respuestas:

33

Si eleva LogLevel a VERBOSE en / etc / sshd / sshd_config, registrará la huella digital de la clave pública utilizada para autenticar al usuario.

LogLevel VERBOSE

entonces recibes mensajes como este

Jul 19 11:23:13 centos sshd[13431]: Connection from 192.168.1.104 port 63529
Jul 19 11:23:13 centos sshd[13431]: Found matching RSA key: 54:a2:0a:cf:85:ef:89:96:3c:a8:93:c7:a1:30:c2:8b
Jul 19 11:23:13 centos sshd[13432]: Postponed publickey for user from 192.168.1.104 port 63529 ssh2
Jul 19 11:23:13 centos sshd[13431]: Found matching RSA key: 54:a2:0a:cf:85:ef:89:96:3c:a8:93:c7:a1:30:c2:8b
Jul 19 11:23:13 centos sshd[13431]: Accepted publickey for user from 192.168.1.104 port 63529 ssh2

Puedes usar

 ssh-keygen -lf /path/to/public_key_file

para obtener la huella digital de una clave pública en particular.

Iain
fuente
2
¡Gracias! Necesito confirmar las huellas digitales de las claves en el authorized_keysarchivo, así que hice este pequeño script para imprimir las huellas digitales de las claves autorizadas:(p="$(mktemp)";cat ~/.ssh/authorized_keys|while IFS="$(printf "\n")" read key; do echo $key > $p; ssh-keygen -lf $p; done; rm -f $p)
Guss
Me di cuenta de que SSH ahora registra la clave dos veces para cada inicio de sesión: ¿alguna idea de por qué y / o cómo hacer que se registre una vez?
Guss
Por qué, ese es un nivel de detalle con el que no estoy familiarizado. ¿Puedes detenerlo? Probablemente no sin hurgar con el código fuente.
user9517 es compatible con GoFundMonica el
2
Este hilo parece relevante. Encuentra la clave coincidente dos veces: una para determinar si la clave sería aceptable o no, luego una segunda vez para verificar la firma que proporciona el cliente.
mpontillo
3

Si su gente está usando ssh-agent, puede poner esto en su .bashrc:

SSH_KEY_NAME=$(ssh-add -L | cut -d' ' -f 3 || 'unknown')
if [[ ! $SSH_KEY_NAME ]]; then SSH_KEY_NAME="no agent"; fi
echo `/bin/date` $SSH_KEY_NAME >> ~/.login.log
Willem
fuente
Es una buena idea, desafortunadamente, una de las razones por las que quiero registrar esto es que estoy usando los comandos certified_keys para los usuarios que quiero registrar, y normalmente no obtienen un shell bash.
Guss
0

Intenta jugar con el LogLevelparámetro en sshd_config. Para más detalles, consulte man sshd_config

Sven
fuente
0

Una buena publicación de blog responde a su pregunta: http://www.screenage.de/blog/2012/02/10/how-to-log-history-and-logins-from-multiple-ssh-keys-under-one- cuenta-usuario-con-marioneta /

yaronf
fuente
3
¡Bienvenido a Server Fault! En general, nos gusta que las respuestas en el sitio sean independientes: los enlaces son geniales, pero si ese enlace alguna vez se rompe, la respuesta debería tener suficiente información para ser útil. Considere editar su respuesta para incluir más detalles. Consulte las preguntas frecuentes para obtener más información.
slm