Я пытаюсь выяснить, заходил ли кто-нибудь на серверы за последний месяц или нет. Серверы включают как Windows, так и Linux. Пожалуйста, помогите, если у кого-то уже есть рабочий сценарий или предложение, как действовать.
Для Linux я пробовал использовать last command output
, но я не знаю, как поместить его в тот же скрипт, который также может получать вывод с серверов Windows, также я ищу команды для Windows.
Часть linux проста: настройте соединение с помощью putty (особенно ключей для ssh без пароля), а затем запустите его следующим образом:
putty -ssh user@server -m 'last|egrep -v "(user|reboot)"|head -n 1'
Для Windows: вы найдете всю информацию в журнале безопасности в средстве просмотра событий. Вы можете использовать командлет PowerShell Get-Winevent
или eventquery.vbs
(Вы найдете это в %WINDIR%\System32
). Однако писать фильтры для журнала событий не совсем быстро.
Отвечая на ваш вопрос ниже (поскольку в комментариях недостаточно текста):
last -n 1000 --since $(date --date="last month" +%Y-%m-%d)|grep -v reboot|wc -l
вернет количество входов в систему за последний месяц плюс 2 (пустая строка плюс wtmp begins [...]
).
В Windows вы можете использовать Get-WinEvent -FilterHashTable @{LogName="system";StartTime=$((Get-Date).AddMonths(-1));ID=4624}
. Проблема здесь в том, что существует много входов в систему (возможно, вам нужны Interactive и RemoteInteractive, но также Service, Network (например, для SMB), ...).
Так что вам придется отфильтровать их в соответствии с вашими потребностями. Вы также можете отфильтровать учетные записи. В этих случаях замените -FilterHashTable
и это ценность с -FilterXPath
или -FilterXml
.
Преимущество -FilterXml
заключается в том, что вы можете использовать программу просмотра журнала событий для постепенного построения фильтра. Отправной точкой является этот пост Technet. Я также рекомендую Справка по Get-WinEvent