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

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

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

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

Ответы [ 19 ]

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

Проверьте, существует ли переменная окружения с именем:

$SSH_CLIENT 

OR

$SSH_CONNECTION

(или любые другие переменные окружения), которые устанавливаются при входе пользователя в систему. Затем обработайте его, используя скрипт входа пользователя.

Извлечь IP:

$ echo $SSH_CLIENT | awk '{ print $1}'
1.2.3.4
$ echo $SSH_CONNECTION | awk '{print $1}'
1.2.3.4
97 голосов
/ 15 июня 2009

Вы можете использовать команду:

server:~# pinky

, что даст вам что-то вроде этого:

Login      Name                 TTY    Idle   When                 Where 

root       root                 pts/0         2009-06-15 13:41     192.168.1.133
29 голосов
/ 20 декабря 2011

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

who am i|awk '{ print $5}'
16 голосов
/ 30 сентября 2014

Просто введите следующую команду на вашем компьютере с Linux:

who
5 голосов
/ 06 декабря 2013
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

Я использую это, чтобы определить переменную DISPLAY для сеанса при входе в систему через ssh, и мне нужно отобразить удаленный X.

3 голосов
/ 24 октября 2015

Улучшение предыдущего ответа. Дает IP-адрес вместо имени хоста. --ips не доступны в OS X.

who am i --ips|awk '{print $5}' #ubuntu 14

универсальнее, измените $ 5 на $ 6 для 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 голосов
/ 05 июня 2018
 who | cut -d"(" -f2 |cut -d")" -f1
2 голосов
/ 03 сентября 2013
netstat -tapen | grep ssh | awk '{ print $4}'
2 голосов
/ 04 ноября 2013
netstat -tapen | grep ssh | awk '{ print $10}'

Выход:

два # в моем эксперименте

netstat -tapen | grep ssh | awk '{ print $4}' 

дает IP-адрес.

Выход:

127.0.0.1:22 # in my experiment

Но результаты смешаны с другими пользователями и прочим. Требуется больше работы.

2 голосов
/ 28 июня 2014

Вы можете получить его программным способом через библиотеку 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;
}
...