É possível fazer com que o OpenSSH registre a chave pública usada na autenticação?

27

Eu tenho um sistema de produção em que várias pessoas diferentes podem fazer login em uma única conta - a conta é para o aplicativo e não para a pessoa, pois não temos contas pessoais em servidores de produção.

Para fins de auditoria, quero poder saber quem está conectado a que horas, e como usamos as chaves SSH para fazer login, parece lógico rastrear isso (como não há outro identificador para rastrear).

Quando o SSH autentica um usuário, ele registra o nome do usuário no log de segurança do sistema, mas não registra qual das chaves públicas autorizadas foi usada no logon. É possível fazer com que o OpenSSH também relate qual chave pública foi usada, ou talvez apenas o comentário associado a essa chave?

O sistema operacional em uso é o CentOS 5.6, mas eu também gostaria de saber se é possível em outros sistemas operacionais.

Guss
fonte

Respostas:

33

Se você aumentar o LogLevel para VERBOSE em / etc / sshd / sshd_config, ele registrará a impressão digital da chave pública usada para autenticar o usuário.

LogLevel VERBOSE

então você recebe mensagens como esta

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

Você pode usar

 ssh-keygen -lf /path/to/public_key_file

para obter a impressão digital de uma chave pública específica.

Iain
fonte
2
Obrigado! Eu preciso confirmar as impressões digitais-chave contra o authorized_keysarquivo, por isso fiz este pequeno script para printout as impressões digitais de chaves 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
Notei que o SSH agora registra a chave duas vezes para cada logon - alguma idéia de por que e / ou como obtê-la para logar uma vez?
Guss
Ora, esse é um nível de detalhe com o qual não estou familiarizado. Você pode pará-lo, provavelmente não sem mexer no código-fonte.
user9517 suporta GoFundMonica
2
Este tópico parece relevante. Ele encontra a chave correspondente duas vezes: uma vez para determinar se a chave seria aceitável ou não, e uma segunda vez para verificar a assinatura que o cliente fornece.
mpontillo
3

Se seu pessoal estiver usando o ssh-agent, você pode colocar isso no seu .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
fonte
É uma boa idéia, infelizmente, uma das razões pelas quais desejo registrar isso é o fato de estar usando os comandos allowed_keys para os usuários que desejo registrar, e eles normalmente não recebem um shell bash.
Guss
0

Experimente brincar com o LogLevelparâmetro sshd_config. Para detalhes, consulte man sshd_config

Sven
fonte
0

Um bom post no blog responde à sua pergunta: http://www.screenage.de/blog/2012/02/10/how-to-log-history-and-logins-from-multiple-ssh-keys-under-one- conta-usuário-com-fantoche /

yaronf
fonte
3
Bem-vindo à falha do servidor! Geralmente, gostamos de respostas no site para poder se manter por conta própria - os links são ótimos, mas se esse link quebrar, a resposta deve ter informações suficientes para continuar sendo útil. Considere editar sua resposta para incluir mais detalhes. Veja o FAQ para mais informações.
SLM