Znajdź adres IP klienta w sesji SSH
Mam skrypt, który ma być uruchomiony przez osobę, która loguje się na serwer za pomocą SSH .
Czy istnieje sposób, aby dowiedzieć się automatycznie, 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 byłoby fajniej, gdybym się dowiedział.
19 answers
Sprawdź czy istnieje zmienna środowiskowa o nazwie:
$SSH_CLIENT
Lub
$SSH_CONNECTION
(lub inne zmienne środowiskowe), które są ustawiane po zalogowaniu się użytkownika. Następnie przetworzyć go za pomocą skryptu logowania użytkownika.
Wyodrębnij IP:
$ echo $SSH_CLIENT | awk '{ print $1}'
1.2.3.4
$ echo $SSH_CONNECTION | awk '{print $1}'
1.2.3.4
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-05 07:06:16
Możesz użyć polecenia:
server:~# pinky
To da ci coś takiego:
Login Name TTY Idle When Where
root root pts/0 2009-06-15 13:41 192.168.1.133
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-15 16:43:51
Spróbuj wykonać następujące czynności, aby uzyskać tylko adres IP:
who am i|awk '{ print $5}'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-24 14:11:40
Po prostu wpisz następujące polecenie na komputerze z Linuksem:
who
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-24 14:13:29
who am i | awk '{print $5}' | sed 's/[()]//g' | cut -f1 -d "." | sed 's/-/./g'
export DISPLAY=`who am i | awk '{print $5}' | sed 's/[()]//g' | cut -f1 -d "." | sed 's/-/./g'`:0.0
Używam tego do określenia mojej zmiennej wyświetlania dla sesji podczas logowania przez ssh i muszę wyświetlić zdalne X.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-06 06:05:33
Poprawa na podstawie wcześniejszej odpowiedzi. Podaje adres ip zamiast nazwy hosta. --ips nie jest dostępny na OS X.
who am i --ips|awk '{print $5}' #ubuntu 14
Bardziej uniwersalny, Zmień $5 na $6 Dla OS X 10.11:
WORKSTATION=`who -m|awk '{print $5}'|sed 's/[()]//g'`
WORKSTATION_IP=`dig +short $WORKSTATION`
if [[ -z "$WORKSTATION_IP" ]]; then WORKSTATION_IP="$WORKSTATION"; fi
echo $WORKSTATION_IP
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-24 18:09:00
netstat -tapen | grep ssh | awk '{ print $4}'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-03 10:58:59
netstat -tapen | grep ssh | awk '{ print $10}'
Wyjście:
Dwa # w moim eksperymencie
netstat -tapen | grep ssh | awk '{ print $4}'
Podaje adres IP.
Wyjście:
127.0.0.1:22 # in my experiment
Ale wyniki są mieszane z innymi użytkownikami i takie tam. Wymaga więcej pracy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-24 14:12:32
Można go uzyskać w sposób programowy poprzez bibliotekę SSH (https://code.google.com/p/sshxcute )
public static String getIpAddress() throws TaskExecFailException{
ConnBean cb = new ConnBean(host, username, password);
SSHExec ssh = SSHExec.getInstance(cb);
ssh.connect();
CustomTask sampleTask = new ExecCommand("echo \"${SSH_CLIENT%% *}\"");
String Result = ssh.exec(sampleTask).sysout;
ssh.disconnect();
return Result;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-24 14:13:02
Netstat zadziała (u góry coś takiego) tcp 0 0 10.x. xx. xx: SSH someipaddress.albo.domena:9379 założona
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-12 20:00:24
Linux: kim jestem | awk '{print $5}' | sed 's/[()]//g'
AIX: kim jestem / awk '{print $6} '/ sed 's / [()] / / g'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-31 11:01:19
Wyszukaj połączenia SSH dla konta "myusername";
Take first result string;
Take 5th column;
Podziel przez": "i zwróć 1 część (numer portu nie jest potrzebny, chcemy tylko IP):
Netstat-tapen | grep "SSHD: myusername" | head-N1 | awk '{split($5, a, ":"); print a [1]} '
Inny sposób:
Kim jestem / awk '{l = length ($5) - 2; print substr ($5, 2, l)} '
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-14 10:09:37
Zazwyczaj jest wpis log w /var / log / messages (lub podobny, w zależności od Twojego systemu operacyjnego), który możesz grep z nazwą użytkownika.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-15 13:56:47
Zakładając, że otworzy sesję interaktywną (tzn. przydziela pseudo terminal ) 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źć ten numer w /var/run/utmp (gdzie będzie również nazwa użytkownika i adres IP, z którego pochodzi połączenie).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-24 14:11:08
Starszy wątek z mnóstwem odpowiedzi, ale żadna nie jest tym, czego szukałem, więc dodaję swoje:
sshpid=$$
sshloop=0
while [ "$sshloop" = "0" ]; do
if [ "$(strings /proc/${sshpid}/environ | grep ^SSH_CLIENT)" ];
then
read sshClientIP sshClientSport sshClientDport <<< $(strings /proc/${sshpid}/environ | grep ^SSH_CLIENT | cut -d= -f2)
sshloop=1
else
sshpid=$(cat /proc/${sshpid}/status | grep PPid | awk '{print $2}')
[ "$sshpid" = "0" ] && sshClientIP="localhost" && sshloop=1
fi
done
Ta metoda jest kompatybilna z bezpośrednimi użytkownikami ssh, sudoed i sesjami ekranowymi. będzie śledził drzewo procesów, aż znajdzie pid ze zmienną SSH_CLIENT, a następnie zapisze jego adres IP jako $sshclientip. jeśli zajdzie zbyt daleko w górę drzewa, zarejestruje IP jako 'localhost' i opuści pętlę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-01 16:28:52
Najprostszym poleceniem, aby uzyskać ostatnich 10 użytkowników zalogowanych na maszynie jest
last|head
.Aby uzyskać wszystkich użytkowników wystarczy użyć polecenia
last
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-05 07:23:35
who | cut -d"(" -f2 |cut -d")" -f1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-05 15:19:01
Jeden kciuk w górę dla @ Nikhil Katre ' s odpowiedź:
Najprostszym poleceniem, aby uzyskać ostatnich 10 użytkowników zalogowanych na maszynie jest
last|head
.Aby uzyskać wszystkich użytkowników wystarczy użyć
last
polecenia
Ten, który używał who
lub pinky
, zrobił to, o co w zasadzie poproszono. Ale Ale ale nie dają informacji o sesjach historycznych.
Co może być również interesujące, jeśli chcesz poznać kogoś, kto właśnie się zalogował i wylogowany Już po rozpoczęciu tego sprawdzania.
Jeśli jest to system wieloosobowy. Polecam dodać konto użytkownika, którego szukasz:
last | grep $USER | head
EDIT:
W moim przypadku zarówno $ssh_client, jak i $ssh_connection nie istnieją.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-28 21:19:12
Spróbuj wykonać następujące czynności, aby uzyskać tylko adres IP przez SSH:
Command: ifconfig
Przykład:
stalinrajindian@ubuntuserver:~$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.30.3.27 netmask 255.255.255.0 broadcast 172.30.3.255
inet6 fe80::a00:27ff:fe8b:9986 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:8b:99:86 txqueuelen 1000 (Ethernet)
RX packets 4876 bytes 1951791 (1.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 775 bytes 73783 (73.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 78 bytes 5618 (5.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 78 bytes 5618 (5.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-16 06:58:50