Выявление сессий по ключу SSH: различия между версиями
Дым (обсуждение | вклад) (→Выходы) |
Дым (обсуждение | вклад) Нет описания правки |
||
Строка 16: | Строка 16: | ||
#!/bin/bash | #!/bin/bash | ||
UNIT= | UNIT=ssh | ||
[ `awk -F= '/^NAME/{gsub("\"","");print $2}' /etc/os-release` = "ALT" ] || | |||
UNIT+=d | |||
USER=${1:-admin} # умолчальный юзер, если не задан иной. | USER=${1:-admin} # умолчальный юзер, если не задан иной. | ||
KEYS=`eval echo ~$USER`/.ssh/authorized_keys # ключ-файл. | KEYS=`eval echo ~$USER`/.ssh/authorized_keys # ключ-файл. |
Версия от 06:32, 27 сентября 2023
Входы
Когда к одному логину на сервере приходится давать доступ нескольким персоналиям (например, разным разработчикам к логину webmaster
для работы с сайтом), хотелось бы понимать, кто именно, откуда и когда входил.
И это далеко не столь сложно, как может представляться, поскольку в журнал SSHd сыплются в т.ч. сообщения формата:
<дата> <время> <хост назначения> <демон[пид]> Accepted publickey for <логин> from <IP-адрес> port <номер> ssh2: <алгоритм ключа> <контрольная сумма ключа>
В то же время, чек-суммы ключей для допущенных пользователей…
- можно получить командой ssh-keygen -E SHA256 -lf ~/.ssh/authorized_keys из указанного в ней файла, где они хранятся в виде:
ssh-<алгоритм> <публичный ключ> <его владелец>
- и сопоставить их со входами этих пользователей.
Набросал для этих целей скриптец:
развернуть/usr/local/bin/sswho |
---|
Вывод выглядит так:
Дата Время Логин IP-адрес Чей ключ год-мес-день ЧЧ:ММ:СС логин ип.ад.ре.с владелец@ключа ... год-мес-день ЧЧ:ММ:СС логин ип.ад.ре.с владелец@ключа
Выходы
Куда сложней обстоит дело с завершением таких сеансов ввиду перманентной долбёжки ботами, войти которые не могут (не только ввиду отключённого парольного доступа, но их ещё и fail2ban за настырность блокирует), однако выходить после неудач вынуждены — что журналируется, забивая выходы «честных бродяг».
Посему длительность сессии приходится прикидывать наугад, выявляя глазами ближайшие от логина по ключу логауты.