Mam skrypt, który ma być uruchomiony przez osobę logującą się do serwera za pomocą SSH .
Czy istnieje sposób, aby automatycznie dowiedzieć się, z jakiego adresu IP łączy się użytkownik?
Oczywiście mógłbym zapytać użytkownika (jest to narzędzie dla programistów, więc nie ma z tym problemu), ale fajniej by było, gdybym się o tym dowiedział.
linux
networking
ssh
ip-address
Lecieć jak po sznurku
źródło
źródło
Odpowiedzi:
Sprawdź, czy istnieje zmienna środowiskowa o nazwie:
LUB
(lub dowolne inne zmienne środowiskowe), które są ustawiane, gdy użytkownik loguje się. Następnie przetwórz to za pomocą skryptu logowania użytkownika.
Wyodrębnij adres IP:
źródło
${SSH_CLIENT%% *}
sudo -E
Możesz użyć polecenia:
co da ci coś takiego:
źródło
pinky --help
:A lightweight 'finger' program; print user information. The utmp file will be /var/run/utmp.
Spróbuj wykonać następujące czynności, aby uzyskać tylko adres IP:
źródło
who am i
! =whoami
przynajmniej na moim Linuksie. Jest piąta sprawa, a jest to nazwa hosta klienta.who am i
: manpage dlawho
mówi:If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.
. Tak naprawdę wszystko, co zawiera dwa słowa, działa, także takie jakwho likes icecream
.who -m --ips|awk '{print $5}'
tak, że miałem tylko adres IP i brak odpowiedzi odwrotnego dns. Dzięki za pomocwho am i
!who am i|awk '{ print $5}'
(tmux(2445).%3)
Po prostu wpisz następujące polecenie na komputerze z systemem Linux:
źródło
źródło
Używam tego do określenia mojej zmiennej DISPLAY dla sesji, gdy loguję się przez ssh i muszę wyświetlić zdalne X.
źródło
who am i | awk '{print $6}' | sed 's/[()]//g' | sed 's/\./\\./g'
ostatnia część wymyka się kropkom.Poprawa wcześniejszej odpowiedzi. Podaje adres IP zamiast nazwy hosta. --ips niedostępne w systemie OS X.
bardziej uniwersalny, zmień 5 USD na 6 USD dla OS X 10.11:
źródło
źródło
(No info could be read for "-p": geteuid()=507 but you should be root.)
sudo ss -tapen | grep ssh | awk '{ print $4}'|grep -v ':22$'
działa?Możesz to uzyskać w sposób programowy za pośrednictwem biblioteki SSH ( https://code.google.com/p/sshxcute )
źródło
netstat będzie działał (u góry coś takiego) tcp 0 0 10.x.xx.xx: ssh someipaddress.or.domainame: 9379 ESTABLISHED
źródło
Wynik:
dwa # w moim eksperymencie
podaje adres IP.
Wynik:
Ale wyniki są mieszane z innymi użytkownikami i rzeczami. Potrzebuje więcej pracy.
źródło
starszy wątek z wieloma odpowiedziami, ale żadna nie jest tym, czego szukałem, więc piszę mój:
ta metoda jest kompatybilna z bezpośrednim ssh, użytkownikami sudoed i sesjami screen. będzie przechodzić przez drzewo procesów, aż znajdzie pid ze zmienną SSH_CLIENT, a następnie zarejestruje swój adres IP jako $ sshClientIP. jeśli znajdzie się za wysoko w drzewie, zapisze IP jako „localhost” i opuści pętlę.
źródło
Zwykle w / var / log / messages (lub podobnym, w zależności od systemu operacyjnego) znajduje się wpis dziennika, który można grepować za pomocą nazwy użytkownika.
źródło
Linux: kim jestem | awk '{print $ 5}' | sed 's / [()] // g'
AIX: kim jestem | awk '{print $ 6}' | sed 's / [()] // g'
źródło
Wyszukaj połączenia SSH dla konta „myusername”;
Weź pierwszy ciąg wynikowy;
Weź piątą kolumnę;
Podziel według ":" i zwróć pierwszą część (numer portu nie jest potrzebny, chcemy tylko IP):
netstat -tapen | grep "sshd: myusername" | głowa -n1 | awk '{split (5 $, a, ":"); print a [1]} '
Inny sposób:
kim jestem | awk '{l = length (5 $) - 2; print substr (5 $, 2, l)} '
źródło
sudo ss -tapen | grep "sshd: $(whoami)"|head -n1|awk '{split($5, a, ":"); print a[1]}'
mówi, że mój klient ssh jest z,2a02
a twoja „Inna droga” mówitmux(2445).%3
Zakładając, że otworzy sesję interaktywną (to znaczy przydzieli pseudoterminal ) i masz dostęp do stdin, możesz wywołać ioctl na tym urządzeniu, aby uzyskać numer urządzenia (/ dev / pts / 4711) i spróbować znaleźć to w / var / run / utmp (gdzie będzie również nazwa użytkownika i adres IP, z którego pochodzi połączenie).
źródło
Jeden kciuk w górę za odpowiedź @Nikhil Katre:
Ten, który używa
who
lubpinky
zrobił to, o co w zasadzie proszono. Ale ale nie podają informacji o sesjach historycznych.Co może być również interesujące, jeśli chcesz poznać kogoś, kto właśnie się zalogował i wylogował, kiedy zaczynasz sprawdzać.
jeśli jest to system wielu użytkowników. Polecam dodać konto użytkownika, którego szukasz:
EDYTOWAĆ:
W moim przypadku zarówno $ SSH_CLIENT, jak i $ SSH_CONNECTION nie istnieją.
źródło
Najprostszym poleceniem, aby pobrać ostatnich 10 użytkowników zalogowanych do komputera, jest
last|head
. Aby zdobyć wszystkich użytkowników, po prostu użyjlast
poleceniaźródło
Otrzymuję następujące dane wyjściowe z
who -m --ips
Debiana 10:Wygląda na to, że dodano nową kolumnę, więc próby
{print $5}
„ weź piątą kolumnę ” już nie działają.Spróbuj tego:
Źródło:
źródło