ssh forcecommand conexão para xxx fechada

2

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
    
por mulllhausen 22.08.2012 / 05:02

1 resposta

4

Está fazendo exatamente o que você mandou fazer. Em vez de executar o comando que o usuário solicitou (que provavelmente é um shell), o sshd está forçando um comando a ser executado, ou seja, seu script. Seu script faz algumas coisas (envia um e-mail) e, em seguida, sai. Como o comando que foi executado pela sessão SSH está concluído, a conexão está fechada.

Se você ainda deseja executar o comando solicitado pelo usuário, é responsabilidade do seu script fazer isso acontecer. O comando original é passado para o script na variável de ambiente SSH_ORIGINAL_COMMAND , portanto, seu script teria que executar explicitamente esse comando após enviar o email.

Sua solução PAM para este caso de uso específico é muito melhor.

    
por 22.08.2012 / 08:11

Tags