У меня есть сервер ubuntu20 и скрипт bash, расположенный в /etc/profile.d, который отправляет сообщение в telegram, если кто-то подключается по ssh. Цель этого скрипта — выяснить, есть ли взлом, и предпринять действия.
Я хочу узнать имя компьютера, который подключился к ssh, чтобы включить его в сообщение Telegram, чтобы узнать, является ли подключившийся кем-то из моей команды или хакером. Я пробовал сохранить результат whoami в переменной, но он показывает имя пользователя linux, а не имя пользователя компьютера того, кто подключился. Могу ли я выполнить команду whoami на устройстве подключившегося? Или любым другим способом выполнить то, о чем я думаю. Код bash:
#!/usr/bin/env bash
# Import credentials form config file
. /home/roots/credentials.config
URL="https://api.telegram.org/bot${KEY}/sendMessage"
DATE="$(date "+%d %b %Y %H:%M")"
if [ -n "$SSH_CLIENT" ]; then
ip="$(echo $SSH_CONNECTION | cut -d " " -f 1)"
TEXT=" New login via ssh, username ${USER} IP (*${ip}*)
Date: ${DATE}"
curl -s -d "chat_id=${USERID}&text=${TEXT}&disable_web_page_preview=true&parse_mode=markdown" $URL > /dev/null
fi
решение1
На основе поста Определение имени хоста, подключенного в данный момент по SSH:
ssh
устанавливает переменную среды$SSH_CONNECTION
, содержащую IP-адрес клиента, номер порта клиента, IP-адрес сервера и номер порта сервера, разделенные пробелами.Вы можете использовать
echo ${SSH_CONNECTION%% *}
чтобы получить IP-адрес клиента. Чтобы получить DNS-имя, используйте что-то вроде
host
илиdig -x
:host ${SSH_CONNECTION%% *}
Попробуйте тогда команду host ${SSH_CONNECTION%% *}
.
В другом ответе отмечено, что данные SSH_CONNECTION
теряются при запуске подпроцесса, например, при вызове su
.
Другие ответы в посте также могут быть полезны.