Найти IP-адрес клиента в сеансе SSH - PullRequest
137 голосов
/ 15 июня 2009

У меня есть скрипт, который должен запускать человек, который входит на сервер с SSH .

Есть ли способ автоматически узнать, с какого IP-адреса подключается пользователь?

Конечно, я мог бы спросить пользователя (это инструмент для программистов, так что никаких проблем с этим), но было бы круче, если я только что узнал.

Ответы [ 19 ]

1 голос
/ 13 декабря 2011

netstat будет работать (наверху как то так) tcp 0 0 10.x.xx.xx: ssh someipaddress.or.domainame: 9379 УСТАНОВЛЕНО

1 голос
/ 14 августа 2014

Поиск SSH-соединений для учетной записи myusername;

Взять первую строку результата;

Возьмите 5-й столбец;

Разделить на ":" и вернуть 1-ю часть (номер порта не нужен, нам нужен только IP):

netstat -tapen | grep "sshd: myusername" | голова -n1 | awk '{split ($ 5, a, ":"); выведите [1]} '


Другой способ:

кто я | awk '{l = длина ($ 5) - 2; print substr ($ 5, 2, l)} '

1 голос
/ 31 мая 2013

Linux: кто я | awk '{print $ 5}' | sed 's / [()] // g'

AIX: кто я | awk '{print $ 6}' | sed 's / [()] // g'

0 голосов
/ 16 апреля 2018

Попробуйте следующее, чтобы получить только IP-адрес через SSH:

Command: ifconfig

Пример:

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
0 голосов
/ 05 октября 2017

Простейшая команда для входа в систему последних 10 пользователей: last|head.

Чтобы получить всех пользователей, просто используйте last команду

0 голосов
/ 01 июня 2017

старая ветка с множеством ответов, но ни одна из них не совсем то, что я искал, поэтому я добавляю свою:

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

этот метод совместим с прямым ssh, sudoed пользователями и сеансами экрана. он будет перемещаться по дереву процессов, пока не найдет pid с переменной SSH_CLIENT, а затем запишет свой IP как $ sshClientIP. если он зайдет слишком далеко вверх по дереву, он запишет IP как «localhost» и выйдет из цикла.

0 голосов
/ 15 июня 2009

Предполагая, что он открывает интерактивный сеанс (то есть выделяет псевдотерминал ) и у вас есть доступ к stdin, вы можете вызвать ioctl на этом устройстве , чтобы получить номер устройства (/ dev / pts / 4711) и попытайтесь найти его в / var / run / utmp (где также будут имя пользователя и IP-адрес, с которого произошло соединение).

0 голосов
/ 29 августа 2018

Большой палец вверх для ответа @Nikhil Katre:

Простейшая команда для входа в систему последних 10 пользователей: last|head.

Чтобы получить всех пользователей, просто используйте last команду

Тот, кто использовал who или pinky, сделал то, что обычно просили. Но Но Но они не дают историческую информацию о сессиях.

Что также может быть интересно, если вы хотите знать кого-то, кто только что вошел в систему и вышли из системы уже при запуске этой проверки.

если это многопользовательская система. Я рекомендую добавить учетную запись пользователя, которую вы ищете:

last | grep $USER | head

EDIT:

В моем случае и $ SSH_CLIENT, и $ SSH_CONNECTION не существуют.

0 голосов
/ 15 июня 2009

Обычно в / var / log / messages есть запись в журнале (или аналогичная, в зависимости от вашей ОС), которую вы можете вводить с именем пользователя.

...