Есть ли способ получить IP-адрес SSH-клиента пользователя в bash-скрипте?

Есть ли способ получить IP-адрес SSH-клиента пользователя в bash-скрипте?

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

У этих пользователей совершенно разные мнения о том, как должна выглядеть подсказка оболочки. Один из них даже настаивает на изменении цветовой палитры. Это привело к спору .bashrc PS1. Я дал им скрипты для установки собственных предпочтений, но... скажем так, это сложно.

К счастью, они оба подключаются из мест с известными IP-адресами. Есть ли способ, которым я могу включить удаленный IP-адрес пользователя в условие и таким образом дать им обоим то, что они хотят, без дополнительных шагов с их стороны? Они подключаются через ssh.

решение1

Из руководства клиента OpenSSH SSH ( man 1 ssh):

ENVIRONMENT
sshобычно устанавливает следующие переменные среды:

[…]

SSH_CONNECTIONОпределяет клиентскую и серверную стороны соединения. Переменная содержит четыре значения, разделенных пробелами: IP-адрес клиента, номер порта клиента, IP-адрес сервера и номер порта сервера.

[…]

В .bashrcвам следует сделать так:

case "${SSH_CONNECTION%% *}" in
1.2.3.4|1.2.3.5 )
   PS1=…
   ;;
2.2.7.* )
   PS1=…
   ;;
# add support for more users if needed
esac

или как

if [ "${SSH_CONNECTION%% *}" = "1.2.3.4" ]; then
   PS1=…
else
   PS1=…
fi

решение2

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

myip=`grep 'Accepted publickey for bozo' /var/log/auth.log | tail -1 | awk '{print $11}'`

и затем сравните $myip. Если они используют пароли, измените их соответствующим образом. (Также измените, если по какой-то причине их имя пользователя не bozo.)

(Это должно работать для Ubuntu и других вариантов Debian; местоположение/имя файла журнала аутентификации и точный формат могут отличаться в других версиях.)

Связанный контент