Czy można zmusić OpenSSH do zarejestrowania klucza publicznego użytego do uwierzytelnienia?

27

Mam system produkcyjny, w którym kilka różnych osób może zalogować się na jedno konto - konto dotyczy aplikacji, a nie osoby, ponieważ nie mamy kont osobistych na serwerach produkcyjnych.

Do celów kontrolnych chcę być w stanie powiedzieć, kto się zalogował i kiedy używamy kluczy SSH do logowania, logiczne wydaje się to śledzenie (ponieważ nie ma innego identyfikatora do śledzenia).

Gdy SSH uwierzytelnia użytkownika, loguje nazwę użytkownika do dziennika bezpieczeństwa systemu, ale nie rejestruje, który z autoryzowanych kluczy publicznych został użyty przy logowaniu. Czy możliwe jest, aby OpenSSH również raportował, który klucz publiczny został użyty, a może tylko komentarz związany z tym kluczem?

Używany system operacyjny to CentOS 5.6, ale chciałbym również usłyszeć, czy jest to możliwe w innych systemach operacyjnych.

Guss
źródło

Odpowiedzi:

33

Jeśli podniesiesz LogLevel do VERBOSE w / etc / sshd / sshd_config, to zarejestruje odcisk palca klucza publicznego użytego do uwierzytelnienia użytkownika.

LogLevel VERBOSE

wtedy otrzymujesz takie wiadomoś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

Możesz użyć

 ssh-keygen -lf /path/to/public_key_file

aby uzyskać odcisk palca określonego klucza publicznego.

Iain
źródło
2
Dzięki! Muszę potwierdzić odciski palców klucza względem authorized_keyspliku, więc stworzyłem ten mały skrypt, aby wydrukować odciski palców autoryzowanych kluczy:(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,
Zauważyłem, że SSH rejestruje teraz klucz dwa razy dla każdego logowania - masz pojęcie, dlaczego i / lub jak go zdobyć, aby logował się raz?
Guss,
To poziom szczegółowości, którego nie znam. Czy możesz to zatrzymać, prawdopodobnie nie bez szukania kodu źródłowego?
user9517 obsługuje GoFundMonica
2
Ten wątek wygląda na trafny. Znajduje pasujący klucz dwa razy: raz, aby ustalić, czy klucz będzie akceptowalny, czy nie, a następnie drugi raz, aby sprawdzić podpis dostarczony przez klienta.
mpontillo
3

Jeśli twoi ludzie używają ssh-agent, możesz umieścić to w swoim .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
źródło
To dobry pomysł, niestety jednym z powodów, dla których chcę się zalogować, jest to, że używam komend uprawnionych dla kluczy użytkowników, których chcę się zalogować, i zwykle nie otrzymują powłoki bash.
Guss
0

Spróbuj pobawić się z LogLevelparametrem w sshd_config. Aby uzyskać szczegółowe informacje, patrz man sshd_config

Sven
źródło
0

Ładny wpis na blogu odpowiada na twoje pytanie: http://www.screenage.de/blog/2012/02/10/how-to-log-history-and-logins-from-multiple-ssh-keys-under-one- konto użytkownika z marionetką /

yaronf
źródło
3
Witaj w Server Fault! Zasadniczo podoba nam się, aby odpowiedzi na stronie były w stanie samodzielnie działać - linki są świetne, ale jeśli ten link kiedykolwiek się zepsuje, odpowiedź powinna zawierać wystarczającą ilość informacji, aby nadal być pomocna. Proszę rozważyć edycję swojej odpowiedzi, aby zawierała więcej szczegółów. Zobacz FAQ, aby uzyskać więcej informacji.
slm