Eu vejo duas maneiras de interpretar sua pergunta.
Monitoramento de logs
Talvez você esteja realmente procurando por um script de monitoramento de log como Fail2ban (que é um projeto python de software livre, para que você possa ver como o código deles funciona).
Os registros do servidor SSH variam em sua localização com base em como eles são instalados. Eles geralmente residem em /var/log/auth.log
, /var/log/secure
, /var/log/sshd.log
ou um nome semelhante em uma área de log alternativa como /usr/local/var/log/
(consulte também Como verificar o log sshd? ). Aqui está um log de amostra:
Aug 14 12:34:56 jodari-desktop sshd[12345]: Accepted pubkey for jodari from 127.0.0.1 port 54321 ssh2: RSA SHA256:3xyQ+PG0Z3CIiShclJ2iNya5TOdKDgE/HrOXr11IdOo
Se você "quiser ser notificado sobre isso e recuperar as chaves públicas, o endereço IP etc." então você só precisa monitorar essa linha. (É possível que você precise aumentar o LogLevel em /etc/ssh/sshd_config
ou onde quer que o arquivo esteja.)
Se você deseja recuperar as chaves públicas reais do usuário (em vez de apenas as impressões digitais), o script precisaria simplesmente percorrer o arquivo $HOME/.ssh/authorized_keys
(esse é o local padrão; ele pode ser alterado com AuthorizedKeysFile
diretiva em seu sshd_config
). Você precisará combinar a impressão digital com a chave pública. É grátis se houver apenas uma linha válida no arquivo, mas você precisaria gerar a impressão digital de cada chave pública e associá-la à impressão digital extraída dos registros. Basta procurar a impressão digital na saída do seguinte comando:
ssh-keygen -lf "$HOME/.ssh/authorized_keys"
Execução de comandos via SSH
Se você está realmente procurando executar as coisas como elas seriam experimentadas em uma sessão SSH, você pode usar chaves ssh sem senha para executar comandos.
Gere chaves ssh apenas para uso interno e você terá acesso sem senha automatizado via ssh no localhost. Isso manterá tudo controlado pelo OpenSSH, portanto, para monitorar conexões, basta procurar localhost como autenticado pelas chaves internas dedicadas nos logs SSH padrão.
Eu não posso falar sobre o modo python de fazer isso, mas você pode fazer tudo isso em python como chamadas de sistema.
Para criar a chave:
mkdir -p "$HOME/.ssh"
chmod 700 "$HOME/.ssh"
ssh keygen -t rsa -b 4096 -P "" -C "python script PASSWORDLESS access" \
-f "$HOME/.ssh/python-localhost.id_rsa"
Para instalá-lo localmente:
cat "$HOME/.ssh/python-localhost.id_rsa.pub" >> "$HOME/.ssh/authorized_keys"
Para usá-lo:
ssh -i "$HOME/.ssh/python-localhost.id_rsa" localhost your_command_goes_here