Ubuntu 20 - Get User Name from SSH KEY

Folosesc Ubuntu 20, atunci cand ma loghez primesc un mail ca m-am logat. In folderul: “.ssh/authorized_keys” sunt cheile SSH si au si un nume. Cum as putea face ca in textul la mail, sa copiez acel nume? Sa stiu numele celui care s-a logat.

Momentan script-ul e asa:

user=`nume user...`
key=`ssh-agent sh -c 'ssh-add; ssh-add -L'`
echo "userul: $user s-a logat cu cheia $key ." | msmtp -d [email protected]

key => reprezinta cheia SSH de pe care s-a logat userul, nu stiu in schimb cum sa preiau si numele userului.

user=$(whoami)

Nu functioneaza. Primesc “root”, in loc de numele meu specificat cheii setate.

Pe serverul pe care faci ssh, te loghezi cu root cred.

Ce iti apare la prompt cand faci ssh?

Ma loghez cu root, apare root. Dar am o cheie privata SSH, care este in fisierul authorized keys si are si un nume. Vreau sa extrag doar acel nume in baza cheii.

3

Am inteles ce vrei tu sa faci si am gasit ceva raspunsuri: bash - How to get the email of the logged in user when login occurs through SSH keys? - Unix & Linux Stack Exchange

Dar am impresia ca vrei sa faci ceva gresit (imi cer scuze daca nu e asa): eu nu as recomanda sa se logheze mai multi utilizatori cu userul root folosind mai multe chei, defapt nu e ok pentru niciun fel de user, mai ales root.

Cred ca e cel mai bine faci cate un user de linux separat, fiecare are cheia lui - ulterior le dai drepturi de sudo/root etc daca vrei neaparat asa.

Exact, nu faci cheie pe root in nici un caz, eventual dai userului drepturi de root.

Nu ai cum sa iei acel user fiindca e un comentariu, nu are valoare, ar trebui sa mapezi undeva cheia cu userul. Ai un text la finalul cheii, nu la inceput, pe ala il poti mapa.

# Get the currently used SSH key
current_ssh_key=$(ssh-add -L | awk '{print $3}')

# Extract the comment from the SSH key
ssh_key_comment=$(ssh-keygen -lf $current_ssh_key | awk '{print $3}')
1 Like

Chestia asta este foarte importantă: comentariul ăla de la sfârșitul cheii nu este musai un mail, nu este un mail valid și este complet opțional.

Cred că forțarea unui anumit format îți va da mai multe bătăi de cap decât estimezi; abordarea corectă este cea sugerată de mai sus, cu utilizatori separați.

Servus,

Poți folosi ssh environment.
În fișierul “.ssh/authorized_keys” trebuie să ai ceva de genul următor:

environment="crUSR=Gabriel" ssh-rsa AAA...bla...BLA...cheie...publica gabriel@cevadenumire
environment="crUSR=Marcel" ssh-rsa AAA...bla...ALTA...cheie...publica marcel@cevadenumire

De asemenea trebuie ca serverul sshd să fie configurat pentru a permite ssh environment. Vezi PermitUserEnvironment în sshd_config.

La conectare poți verifica în linia de comandă în terminal:

# echo $crUSR

Folosind prima cheie ”AAA…bla…BLA…cheie…publica” vei obține:

# Gabriel

Folsind cea de a doua cheie ”AAA…bla…ALTA…cheie…publica” vei obține:

# Marcel

Important:
Trebuie să revezi implicațiile din punct de vedere al securității.
Și revin și eu asupra recomandării de a nu înregistra și folosi chei de securitate direct pentru userul root.

3 Likes

Nu exista nici o problema in a utiliza userul root cu chei ssh mai ales ca sunt provideri de VPS-uri care furnizeaza masini doar cu userul root si chiar cheia lor pusa by default in authorized_keys pentru recuperare in cazul in care faci vreo prostie. Evident ca totul e sa sti ce faci, sa nu dai comenzi aiurea ca root si sa pui bine chieile alea ssh. Altfel hackerii oricum te ataca constant cata vreme esti in internet cu masina aia cu sau fara userul root.

Este de dorit sa se lucreze ca user dar realitatea e ca implementarea multor aplicatii se face mult mai usor ca root mai ales cand vine vorba de servicii prin systemd si nu numai.

Cred ca cea mai buna varianta pt sistemul meu este cea expusa de @zillo . Multumesc frumos, daca nu apar alte sugestii, pe aceasta o voi folosi.