Выполнить действие, когда пользователь входит в систему через SSH с определенного хоста
у меня есть вопрос, который озадачивает меня, и мне интересно, пытался ли кто-нибудь достичь следующего:
предположим, что это результат моей "последней" команды в среде Linux:
root pts/1 192.168.1.10 Wed Feb 10 07:04 - 07:57 (00:52)
root pts/2 Tue Feb 9 22:00 - 00:13 (02:13)
Как я могу настроить определенное действие (скажем, например, измененный MOTD или отправку электронной почты), если пользователь "root" вошел в систему с 192.168.1.10. Есть ли способ получить эту информацию?
вторая часть этого вопроса заключается в том, что как я могу сделайте вышеуказанную проверку немного более надежной-т. е. если у меня есть следующее:
mary pts/1 192.168.1.10 Wed Feb 10 07:04 - 07:57 (00:52)
bob pts/2 Tue Feb 9 22:00 - 00:13 (02:13)
теперь я хотел бы выполнить действие, если имя пользователя равно "mary", а хост-192.168.1.10.
любые предложения приветствуются.
спасибо заранее.
6 ответов
есть специальный файл /etc/ssh/sshrc
где вы можете поместить некоторые команды, которые будут выполняться каждый раз, когда кто-то подключается по ssh
. Я написал это для вас:
#!/bin/bash
mail=user@domain.tld
monitored_user=root
monitored_ip=x.x.x.x
hostname=$(hostname)
# add a welcome message:
printf >&2 "\nWelcome on $hostname $USER\n"
read -d " " ip <<< $SSH_CONNECTION
[[ $ip == $monitored_ip && $USER == $monitored_user ]] || exit 0
date=$(date "+%d.%m.%Y %Hh%M")
reverse=$(dig -x $ip +short)
mail -s "Connexion of $USER on $hostname" $mail <<EOF
IP: $ip
Reverse: $reverse
Date: $date
EOF
поместите этот скрипт в файл, затем поместите полный путь скрипта в /etc/ssh/sshrc
на man ssh
:
в/etc/СШ/кпчюс : Команды в этом файле выполняются ssh, когда пользователь войдите в систему непосредственно перед запуском оболочки (или команды) пользователя. Увидеть страница руководства sshd(8) за дополнительной информацией.
Спасибо за все ваши ответы. В конце концов мне удалось найти решение, которое пока работает, но у него есть один недостаток, на который я укажу через минуту.
я добавил следующее в файл /etc/bashrc (или /etc/bash.bashrc в любой среде, которую вы используете):
HOST="192.168.0.1"
RHOST=`who am i | sed -n 's/.*(\([^) ]*\).*//p; 1q'`
if [ "$RHOST" == "$HOST" ]; then
echo "SAY WHAT!"
#add further actions here if needed
fi
недостаток, о котором я говорил раньше, может на самом деле не быть недостатком. Если вы уже SSH-ed в системе, и вы хотите SSH хосту, который живет на том же IP, скажем ssh root@your-host
who am i
затем напечатает "your-host", но я думаю, что так и должно быть.
Излишне говорить, что выше sed
оператор может быть изменен, так что вы можете захватить имя пользователя, а также, и вы можете расширить if/else
заявление для удовлетворения ваших потребностей.
еще раз спасибо за все ваши ответы.
один из способов-периодически запускать простой скрипт:
#!/bin/bash
users=$(last | sed -ne '/192\.168\.1\.10/ s/\([^ ]*\).*//p')
for user in $users; do
sendmail "$user" < email.txt
done
это передаст последнюю команду в sed, чтобы извлечь список пользователей и сохранить его в переменную $users
. Команда sed использует -n
флаг, поэтому он печатает только то, что мы ему говорим. Во-первых, мы выбираем строки, содержащие указанный IP, с /192\.168\.1\.10/
"адрес". В этих строках мы пытаемся извлечь символы перед пробелом, и если нам это удастся, мы напечатаем результат.
тогда мы можем сделать петлю через $users
переменная и действуйте соответственно.
один из способов вызвать это повторно будет через cron, и более простым способом было бы сделать while true; do ./my_script.bash; sleep 60; done
.
Вы можете добавить что-то /etc/profile
или эквивалент, что делает что-то в зависимости от значения $SSH_CLIENT
.
похоже, вы используете last
потому что он читает /var/log/wtmp
по умолчанию это запись Логинов. The who
команда также позволяет читать тот же файл, но с интерфейсом больше для ваших нужд.
например:
$ who --ips /var/log/wtmp | grep '^msw.*127.0.0.1'
msw pts/2 2012-10-07 15:52 127.0.0.1
msw pts/3 2012-10-07 15:55 127.0.0.1
где ни одна из этих сессий не была активной, а скорее исторической и зарегистрированной.
в ubuntu я поставил скрипт в
/etc/profile.d
и когда кто-то (пользователь ssh) входит в систему, он отправляет электронное письмо на мою почту
#/etc/profile.d/run_on_loggin.sh
echo $(who i am) | mail -s 'SSH Login Notification' mymail@hotmail.com
Я хочу создать php-файл с smtp, чтобы отправить мне письмо с моей почтой... несколько раз hotmail сохранялся в спаме...
Если у меня есть php-файл, я буду работать как этой...
Если я хочу передать var в файл php, запустите как этой...
извините мой английский: 3
Примечание: i подумайте, что эта команда запускается от пользователя, будьте осторожны, если у пользователя нет разрешения использовать какую-либо команду или отправлять электронную почту.