Estou configurando um sistema de notificação ssh para meus servidores. o objetivo é que o sshd me envie um e-mail toda vez que eu fizer login em um dos meus servidores com a esperança de capturar intrusos. Eu estou usando o Ubuntu 10.04 e 11.04.
em /etc/ssh/sshd_config
i adicionou a seguinte linha:
ForceCommand /usr/local/scripts/ssh_notifications.php
e o conteúdo deste arquivo são: (note que eu substitui qualquer coisa privada aqui por xxx - estes não são os valores reais mostrados no meu shell)
#!/usr/bin/php
<?php
$remote_host_ip = trim(shell_exec('echo $SSH_CONNECTION'));
$remote_host = strlen($remote_host_ip) ? "ip $remote_host_ip" : "unknown ip address";
$localhost = php_uname('n');
$now = str_replace('T', ' ', date('c'));
$to = '[email protected]';
$subject = "$localhost accessed via ssh";
$body = "date: $now, by: $remote_host";
//die("subject: [$subject], body: [$body]"); //debug use only
mail($to, $subject, $body);
exit(0);
?>
(eu escolhi php só porque sou mais proficiente nisso do que scripts de shell raw)
então eu emito sudo /etc/init.d/ssh restart
para reiniciar meu sshd e tentar acessar o servidor remotamente. Quando eu faço isso, o e-mail é enviado corretamente para minha caixa de entrada, mas recebo o seguinte erro e não consigo acessar meu servidor:
Connection to xxx closed.
no entanto, se eu comentar a linha forcecommand no sshd_config, então eu posso logar novamente. Obviamente, eu quero fazer login e enviar um e-mail para mim.
oh, também:
$ tail -5 /var/log/auth.log
Aug 22 12:33:32 xxxx sudo: xxxx : TTY=pts/0 ; PWD=/usr/local/scripts ; USER=root ; COMMAND=/usr/bin/vi /etc/ssh/sshd_config
Aug 22 12:33:38 xxxx sshd[6863]: Accepted publickey for xxxx from 192.168.0.2 port 39446 ssh2
Aug 22 12:33:38 xxxx sshd[6863]: pam_unix(sshd:session): session opened for user xxxx by (uid=0)
Aug 22 12:33:38 xxxx sshd[6941]: Received disconnect from 192.168.0.2: 11: disconnected by user
Aug 22 12:33:38 xxxx sshd[6863]: pam_unix(sshd:session): session closed for user xxxx
isso me faz pensar que forcecommand está superando algo crucial no sshd. Eu pensei que poderia ser pam, mas eu desliguei pam com a linha
UsePAM no
em /etc/ssh/sshd_config
e ainda recebeu a mesma mensagem "conexão fechada" no cliente.
alguém já teve esse problema antes e alguém pode sugerir uma solução?
solução alternativa
Eu não tenho certeza porque o comando ssh forcecommand não funcionou, mas eu consegui alcançar o que eu queria (notificações por e-mail no acesso ssh) com o pam_exec assim:
$ grep -B 2 -A 1 php /etc/pam.d/sshd
# run ssh notification script upon successful login
session optional pam_exec.so /usr/local/scripts/ssh_notifications.php
$ sudo /etc/init.d/ssh restart