Est-il possible d'obtenir OpenSSH pour enregistrer la clé publique qui a été utilisée dans l'authentification?

27

J'ai un système de production où plusieurs personnes différentes sont autorisées à se connecter à un seul compte - le compte est pour l'application et non pour la personne car nous n'avons pas de comptes personnels sur les serveurs de production.

À des fins d'audit, je veux pouvoir dire qui s'est connecté à quel moment, et comme nous utilisons des clés SSH pour se connecter, il semble logique de suivre cela (car il n'y a pas d'autre identifiant à suivre).

Lorsque SSH authentifie un utilisateur, il enregistre le nom d'utilisateur dans le journal de sécurité du système, mais il ne consigne pas laquelle des clés publiques autorisées a été utilisée lors de la connexion. Est-il possible que OpenSSH signale également quelle clé publique a été utilisée, ou peut-être juste le commentaire associé à cette clé?

Le système d'exploitation utilisé est CentOS 5.6, mais j'aimerais également savoir si c'est possible sur d'autres systèmes d'exploitation.

Guss
la source

Réponses:

33

Si vous augmentez LogLevel à VERBOSE dans / etc / sshd / sshd_config, il enregistrera l'empreinte digitale de la clé publique utilisée pour authentifier l'utilisateur.

LogLevel VERBOSE

alors vous obtenez des messages comme celui-ci

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

Vous pouvez utiliser

 ssh-keygen -lf /path/to/public_key_file

pour obtenir l'empreinte digitale d'une clé publique particulière.

Iain
la source
2
Merci! Je dois confirmer les empreintes digitales des clés par rapport au authorized_keysfichier, j'ai donc fait ce petit script pour imprimer les empreintes digitales des clés autorisées:(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
J'ai remarqué que SSH enregistre maintenant la clé deux fois pour chaque connexion - une idée pourquoi et / ou comment l'obtenir pour la connecter une fois?
Guss
C'est un niveau de détail que je ne connais pas. Pouvez-vous l'arrêter, probablement pas sans fouiner avec le code source.
user9517 prend en charge GoFundMonica
2
Ce fil semble pertinent. Il trouve la clé correspondante deux fois: une fois pour déterminer si la clé serait acceptable ou non, puis une deuxième fois pour vérifier la signature fournie par le client.
mpontillo
3

Si vos gens utilisent ssh-agent, vous pouvez mettre ceci dans votre .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
la source
C'est une bonne idée, malheureusement l'une des raisons pour lesquelles je veux me connecter, c'est que j'utilise des commandes authorized_keys pour les utilisateurs que je veux me connecter, et ils ne reçoivent normalement pas de shell bash.
Guss
0

Essayez de jouer avec le LogLevelparamètre dans sshd_config. Pour plus de détails, reportez-vous à man sshd_config

Sven
la source
0

Un joli billet de blog répond à votre question: http://www.screenage.de/blog/2012/02/10/how-to-log-history-and-logins-from-multiple-ssh-keys-under-one- compte-utilisateur-avec-marionnette /

yaronf
la source
3
Bienvenue dans Server Fault! En règle générale, nous aimons que les réponses sur le site puissent être autonomes - Les liens sont excellents, mais si ce lien se casse, la réponse devrait contenir suffisamment d'informations pour être utile. Veuillez envisager de modifier votre réponse pour inclure plus de détails. Voir la FAQ pour plus d'informations.
slm