Envie um e-mail sempre que uma chave SSH for usada

Envie um e-mail sempre que uma chave SSH for usada

Tenho cerca de 30 servidores CentOS 6 quase idênticos que preciso para poder enviar arquivos de configuração atualizados automaticamente usando uma chave rsa para fazer login como root. Normalmente será apenas rsync, mas às vezes pode ser necessário executar comandos nos servidores, por isso também precisa de ssh. Como isso será executado como um script para atualizar todos os 30 servidores, não quero ter uma senha na chave.

Eu tenho essa parte funcionando bem. Criei a chave rsa, adicionei-a aauthorized_keys para root, para poder fazer ssh ou rsync nos servidores sem precisar digitar uma senha.

Eu configurei oauthor_keys para aceitar apenas a chave de um único nome de host, o que deve tornar esta configuração relativamente segura. No entanto, ainda não estou totalmente confortável com isso, então gostaria de configurá-lo para enviar um e-mail para nossa caixa de correio técnica compartilhada sempre que essa chave for usada.

Muitas vezes eu estarei logando nesses servidores como eu mesmo e tentando obter root. Tudo bem e não quero enviar spam para a caixa de correio técnica sempre que um de nós fizer login. Só quero receber os e-mails quando a chave SSH for usada.

Aqui está o que tenho até agora, em server1[até 30].example.com:

cat /root/.ssh/authorized_keys
from="pusher.example.com",environment="SSHKEY=1" ssh-rsa AAAAB3NzaIwAAAxetcetc== root@pusher

tail -n 3 /root/.bash_profile
if [[ "${SSHKEY}" == "1" ]] ; then
echo 'Either we are getting hacked, or somebody used the SSH key on pusher to push something out to ' `hostname` ' at ' `date` | mail -s "WARNING - ROOT SSH KEY USED ON `hostname`!" [email protected]
fi

Isso funciona perfeitamente para SSH - se eu fizer o putty como eu mesmo e executar su para obter root, não recebo o e-mail, mas se eu fizer login no pusher e executar:

ssh -i /root/.ssh/server1.pri server1.example.com

Eu recebo um e-mail. O problema é enviar arquivos. Se eu executar um dos seguintes:

scp -i /root/.ssh/server1.pri /tmp/file.txt server1.example.com:/tmp/
rsync -e 'ssh -i /root/.ssh/server1.pri' /tmp/test.txt server1.example.com:/tmp/

Ainda não recebi o e-mail.

Existe uma maneira, em vez de depender do bash_profile, de configurar isso para enviar um e-mail sempre que a chave for usada, para qualquer coisa? (Ou, alternativamente, apenas se for usado para scp ou rsync, e restringirei a chave para executá-los apenas?)

Responder1

Você pode usar mal /root/.ssh/rcpara o seu propósito (veja man sshd) e inclua um mailxcomando lá.

Responder2

~/.bash_profile é usado se o bash for invocado como um shell de login interativo. ~/.bashrc é usado para shells sem login. No entanto, usar esse arquivo não é confiável, porque o invasor pode exigir que os arquivos de inicialização do shell não sejam lidos.

Responder3

Na página de manual do sshd, seção 'authorized_keys':

comando = "comando"

Especifica que o comando será executado sempre que esta chave for usada para autenticação. O comando fornecido pelo usuário (se houver) é ignorado. O comando é executado em um pty se o cliente solicitar um pty; caso contrário, ele será executado sem tty. Se for necessário um canal limpo de 8 bits, não se deve solicitar um pty ou deve-se especificar no-pty. Uma citação pode ser incluída no comando, citando-o com uma barra invertida. Esta opção pode ser útil para restringir certas chaves públicas para executar apenas uma operação específica. Um exemplo pode ser uma chave que permite backups remotos, mas nada mais. Observe que o cliente pode especificar o encaminhamento TCP e/ou X11, a menos que sejam explicitamente proibidos. O comando fornecido originalmente pelo cliente está disponível na variável de ambiente SSH_ORIGINAL_COMMAND. Observe que esta opção se aplica à execução de shell, comando ou subsistema. Observe também que este comando pode ser substituído por uma diretiva ForceCommand sshd_config(5) ou por um comando incorporado em um certificado.

Você pode adicionar essa opção à sua chave, assim como adicionou as opções 'de' e 'ambiente':

cat /root/.ssh/authorized_keys
from="pusher.example.com",environment="SSHKEY=1" ssh-rsa AAAAB3NzaIwAAAxetcetc== root@pusher

informação relacionada