![Есть ли способ получить IP-адрес SSH-клиента пользователя в bash-скрипте?](https://rvso.com/image/1606698/%D0%95%D1%81%D1%82%D1%8C%20%D0%BB%D0%B8%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20IP-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%20SSH-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%B0%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%20%D0%B2%20bash-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B5%3F.png)
У меня есть два пользователя, которым необходимо использовать один и тот же логин из-за ограничений приложения.
У этих пользователей совершенно разные мнения о том, как должна выглядеть подсказка оболочки. Один из них даже настаивает на изменении цветовой палитры. Это привело к спору .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; местоположение/имя файла журнала аутентификации и точный формат могут отличаться в других версиях.)