#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 }'
.