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ł.

Author: dfeuer, 2009-06-15

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
 212
Author: nolim1t,
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
 86
Author: vncprado,
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}'
 28
Author: AlexP,
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
 15
Author: Bangar,
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.

 5
Author: Spindrift,
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
 3
Author: SeeBenClick,
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}'
 2
Author: Sébastien Moreau,
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.

 2
Author: gerard,
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;
}
 2
Author: vineetv2821993,
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

 1
Author: aric,
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'

 1
Author: pfrandsen,
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)} '

 1
Author: Nex,
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.

 0
Author: Daniel Schneller,
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).

 0
Author: mihi,
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ę.

 0
Author: Andrej,
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

 0
Author: Nikhil Katre,
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
 0
Author: danilo,
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ą.

 0
Author: Kangqiao Zhao,
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
 -2
Author: stalinrajindian,
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