У меня есть скрипт, который должен запускаться человеком, который входит на сервер с SSH .
Есть ли способ автоматически узнать, с какого IP-адреса подключается пользователь?
Конечно, я мог бы спросить пользователя (это инструмент для программистов, так что никаких проблем с этим), но было бы круче, если я только что узнал.
linux
networking
ssh
ip-address
ЭЛЕКТРОДИСТАНЦИОННАЯ СИСТЕМА УПРАВЛЕНИЯ
источник
источник
Ответы:
Проверьте, существует ли переменная окружения с именем:
ИЛИ
(или любые другие переменные окружения), которые устанавливаются, когда пользователь входит в систему. Затем обработайте его, используя скрипт входа пользователя.
Извлеките IP:
источник
${SSH_CLIENT%% *}
sudo -E
Вы можете использовать команду:
это даст вам что-то вроде этого:
источник
pinky --help
:A lightweight 'finger' program; print user information. The utmp file will be /var/run/utmp.
Попробуйте следующее, чтобы получить только IP-адрес:
источник
who am i
! =whoami
по крайней мере на моем Linux. Есть пятое, и это имя хоста клиента.who am i
: странице руководства дляwho
говорит:If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.
. Так что на самом деле работает все, что с двумя словами, и тому подобноеwho likes icecream
.who -m --ips|awk '{print $5}'
того, что у меня был только IP и никакого обратного DNS-ответа. Спасибо за помощьwho am i
!who am i|awk '{ print $5}'
(tmux(2445).%3)
Просто введите следующую команду на вашем компьютере с Linux:
источник
источник
Я использую это для определения моей переменной DISPLAY для сеанса при входе в систему через ssh, и мне нужно отобразить удаленный X.
источник
who am i | awk '{print $6}' | sed 's/[()]//g' | sed 's/\./\\./g'
последняя часть ускользает от точек.Улучшение по предварительному ответу. Дает IP-адрес вместо имени хоста. --ips не доступны в OS X.
более универсально, измените 5-6 долларов на OS X 10.11:
источник
источник
(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$'
работает?Вы можете получить его программным способом через библиотеку SSH ( https://code.google.com/p/sshxcute )
источник
netstat будет работать (наверху что-то вроде этого) tcp 0 0 10.x.xx.xx: ssh someipaddress.or.domainame: 9379 УСТАНОВЛЕНО
источник
Вывод:
два # в моем эксперименте
дает IP-адрес.
Вывод:
Но результаты смешиваются с другими пользователями и прочее. Это требует больше работы.
источник
старая ветка с множеством ответов, но ни одна из них не совсем то, что я искал, поэтому я добавляю свою:
этот метод совместим с прямым ssh, sudoed пользователями и сеансами экрана. он будет перемещаться по дереву процессов, пока не найдет pid с переменной SSH_CLIENT, а затем записывает свой IP-адрес как $ sshClientIP. если он зайдет слишком далеко вверх по дереву, он запишет IP как «localhost» и выйдет из цикла.
источник
Обычно в / var / log / messages есть запись в журнале (или аналогичная, в зависимости от вашей ОС), которую вы можете использовать в имени пользователя.
источник
Linux: кто я | awk '{print $ 5}' | sed 's / [()] // g'
AIX: кто я | awk '{print $ 6}' | sed 's / [()] // g'
источник
Поиск 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)} '
источник
sudo ss -tapen | grep "sshd: $(whoami)"|head -n1|awk '{split($5, a, ":"); print a[1]}'
говорит, что мой клиент ssh от,2a02
а ваш "Другой путь:" говоритtmux(2445).%3
Предполагая, что он открывает интерактивный сеанс (то есть выделяет псевдотерминал ) и у вас есть доступ к stdin, вы можете вызвать ioctl на этом устройстве, чтобы получить номер устройства (/ dev / pts / 4711) и попытаться найти его в / var / run / utmp (где также будут имя пользователя и IP-адрес, с которого произошло соединение).
источник
Один большой палец вверх для ответа @Nikhil Katre:
Тот, кто использовал
who
илиpinky
сделал то, что в основном просили. Но Но Но Они не дают историческую информацию о сессиях.Это также может быть интересно, если вы хотите знать кого-то, кто только что вошел в систему и вышел из нее, когда вы начинаете эту проверку.
если это многопользовательская система. Я рекомендую добавить учетную запись пользователя, которую вы ищете:
РЕДАКТИРОВАТЬ:
В моем случае и $ SSH_CLIENT, и $ SSH_CONNECTION не существуют.
источник
Простейшая команда для входа в систему последних 10 пользователей - это
last|head
. Чтобы получить всех пользователей, просто используйтеlast
командуисточник
Я получаю следующий вывод из
who -m --ips
Debian 10:Похоже, что новый столбец был добавлен, так
{print $5}
или " взять 5-й столбец попытки » больше не работают.Попробуй это:
Источник:
источник