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

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

Я хотел бы, как администратор OpenBSD ssh jumphost, используемого несколькими людьми, запускать определенную команду каждый раз, когда любой пользователь подключается через SSH, даже если это просто туннелирование.

Это возможно?

Я пробовал использовать ForceCommandи , /etc/sshrcно, похоже, они применяются только тогда, когда у пользователя есть интерактивный сеанс, и не в противном случае.

Поскольку я использую OpenBSD, к сожалению, ничего на основе PAM работать не будет, т.е.Этот ответ на тему Unix и Linux

Скрипт просто запускается sendmailс помощью whoamiи , $SSH_CONNECTIONчтобы сообщить мне, кто и откуда вошел в систему.

#!/bin/sh

[email protected]

sendmail -F alerts -f $EMAIL root << EOF
Subject: New Login For $1
Message-ID: <$(date +%s)@$(hostname)>
X-Mailer: OpenSMTPD
Content-Type: text/plain

There has been a new login for $1 on $SSH_CONNECTION
EOF

решение1

Вы можете отслеживать /var/log/authlogи использовать awkдля отправки вам сообщения при каждом совпадении определенной строки:

tail -f /var/log/authlog | awk '/Accepted pubkey/ { system("mail -s " $0 " [email protected] << EOF\nEOF") }'

Конечно, вы можете заменить его /Accepted pubkey/на другой шаблон, который подходит вашему случаю. Я решил отправлять пустые письма с темой лога, для удобства чтения на MUA, но вы можете предпочесть что-то вроде

system("mail -s New\\ Login [email protected] << EOF\n" $0 "\nEOF")

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