Как найти IP терминала, который в данный момент авторизован?

#linux #bash #ssh #awk

#linux #bash #ssh #awk

Вопрос:

Я смог написать скрипт, возвращающий IP-адрес вошедшего удаленного пользователя. Это выглядит следующим образом:

 nslookup `pinky | sed -n '2,2p' | awk '{ print $5}'` | tail -n2 | grep Address |  awk '{ print $2}'
  

Однако из-за сложного синтаксического анализа я не могу быть уверен, что он будет функционировать безупречно при любых условиях.

Есть ли лучший подход?

Ответ №1:

Попробуйте

 ip="${SSH_CLIENT/ */}"
  

это короче.

С другой стороны, я не уверен, что именно вы имели в виду под 2,2p . Какой удаленный пользователь вам нужен? Первый в списке?

Комментарии:

1. К сожалению, это не сработало при запуске от имени root (возвращалась пустая строка). 2,2p — это просто оператор sed, предназначенный для изоляции 2-й строки. И да, скрипт необходимо изменить, чтобы идентифицировать соответствующий терминал.

2. Да, это был мой вопрос — почему вторая строка? Какого пользователя вы ищете? Команда, которую я вам дал, должна установить ip на удаленный ip текущего подключенного по ssh пользователя, но я не уверен, что сейчас это то, что вы ищете.

3. Я зарегистрировался в root и хотел текущего пользователя (моя конечная цель — показать журналы, исключающие действия, совершенные мной)

4. Это несколько сложно выяснить после вас su - , но я боюсь, что ваша цель в любом случае недостижима до желаемого уровня совершенства.

Ответ №2:

ради тех, кого интересует подобное решение, работающее под root, вот скрипт:

 #!/bin/bash
TERM_CLI_NAME=`who am i | awk '{print $5}'|sed 's/.(.*)./1/'`
nslookup $TERM_CLI_NAME | tail -n2 | grep Address |  awk '{ print $2}'
  

Комментарии:

1. Отключите grep и напишите awk '/Address/ { print $2 }' .