Reutilizar conexões ssh remotas e reduzir o detalhamento do registro de comandos / sessões?

3

Eu tenho vários sistemas que dependem do espelhamento em nível de aplicativo para um servidor secundário. O servidor secundário extrai dados por meio de uma série de comandos SSH remotos executados no primário. O aplicativo é um pouco de caixa preta, e eu talvez não seja capaz de fazer modificações nos scripts que são usados.

Meu problema é que o log em / var / log / secure é absolutamente inundado com solicitações do usuário do serviço, admin . Esses comandos ocorrem várias vezes por segundo e têm um impacto correspondente nos logs. Eles confiam na troca de chaves sem senha. O sistema operacional envolvido é EL5 e EL6. Exemplo abaixo.

  • Existe alguma maneira de reduzir a quantidade de log dessas ações. (Por usuário? Por fonte?)
  • Existe uma maneira mais limpa para os desenvolvedores executarem essas execuções ssh sem gerar tantas sessões? Parece ineficiente. Posso reutilizar as conexões existentes?

Exemplo de saída de log:

Jul 24 19:08:54 Cantaloupe sshd[46367]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:54 Cantaloupe sshd[46446]: Accepted publickey for admin from 172.30.27.32 port 33526 ssh2
Jul 24 19:08:54 Cantaloupe sshd[46446]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:54 Cantaloupe sshd[46446]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:54 Cantaloupe sshd[46475]: Accepted publickey for admin from 172.30.27.32 port 33527 ssh2
Jul 24 19:08:54 Cantaloupe sshd[46475]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:54 Cantaloupe sshd[46475]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:54 Cantaloupe sshd[46504]: Accepted publickey for admin from 172.30.27.32 port 33528 ssh2
Jul 24 19:08:54 Cantaloupe sshd[46504]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:54 Cantaloupe sshd[46504]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:54 Cantaloupe sshd[46583]: Accepted publickey for admin from 172.30.27.32 port 33529 ssh2
Jul 24 19:08:54 Cantaloupe sshd[46583]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:54 Cantaloupe sshd[46583]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:54 Cantaloupe sshd[46612]: Accepted publickey for admin from 172.30.27.32 port 33530 ssh2
Jul 24 19:08:54 Cantaloupe sshd[46612]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:54 Cantaloupe sshd[46612]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:55 Cantaloupe sshd[46641]: Accepted publickey for admin from 172.30.27.32 port 33531 ssh2
Jul 24 19:08:55 Cantaloupe sshd[46641]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:55 Cantaloupe sshd[46641]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:55 Cantaloupe sshd[46720]: Accepted publickey for admin from 172.30.27.32 port 33532 ssh2
Jul 24 19:08:55 Cantaloupe sshd[46720]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:55 Cantaloupe sshd[46720]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:55 Cantaloupe sshd[46749]: Accepted publickey for admin from 172.30.27.32 port 33533 ssh2
Jul 24 19:08:55 Cantaloupe sshd[46749]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:55 Cantaloupe sshd[46749]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:55 Cantaloupe sshd[46778]: Accepted publickey for admin from 172.30.27.32 port 33534 ssh2
Jul 24 19:08:55 Cantaloupe sshd[46778]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:55 Cantaloupe sshd[46778]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:55 Cantaloupe sshd[46857]: Accepted publickey for admin from 172.30.27.32 port 33535 ssh2
    
por ewwhite 25.07.2014 / 06:08

3 respostas

3

Respondendo especificamente à pergunta sobre se é possível reduzir a sobrecarga de gerar mais conexões SSH: Sim. Você pode usar o recurso ControlMaster presente desde o OpenSSH 5.5. Esta postagem do blog terá mais detalhes: link

Não tenho certeza se isso afetaria a quantidade de log que acontece. Mas, dependendo de como o aplicativo está escrito, pode ser possível usar esse recurso sem realmente modificar o aplicativo, apenas reconfigurando o OpenSSH. Assumindo que ele usa o OpenSSH como cliente, ou um cliente diferente com esse suporte. Não há informações suficientes aqui para ter certeza.

    
por 25.07.2014 / 13:09
1

Como você está usando o rsyslog, você tem a opção de filtrar mensagens facilmente. Um exemplo básico para descartar mensagens é este:

#/etc/rsyslog.cof 

# this is original log file including all authpriv messages regarding admin
authpriv.* /var/log/secure.admin

# These rules filter the remote key based logins for admin
:msg, contains, "Accepted publickey for admin from 172.30.27.32" ~
:msg, contains, "session opened for user admin" ~
:msg, contains, "session closed for user admin" ~
authpriv.*     /var/log/secure

O til ~ é a instrução para descartar mensagens contendo a string anterior.

Uma sintaxe um pouco mais avançada e melhor (não testada) é:

if $syslogfacility-text == 'authpriv' and 
 ($msg contains 'for user admin' or $msg contains 'publickey for admin from 172.30.27.32') 
then /var/log/secure.admin

if $syslogfacility-text == 'authpriv' and not
 ($msg contains 'for user admin' or $msg contains 'publickey for admin from 172.30.27.32') 
then /var/log/secure

Onde cada instrução if está em uma única linha.

    
por 25.07.2014 / 12:21
0

Uma atualização sobre isso ...

Eu resolvi isso em meus sistemas RHEL / CentOS EL6 ativando o recurso SSH ControlMaster:

No arquivo /home/username/.ssh/config do host de conexão:

Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
#ControlPersist 600

O diretório ~/.ssh/sockets/ precisava ser criado manualmente.

A diretiva ControlPersist é um recurso de persistência que não foi retornado para o OpenSSH disponível no EL6 . Eu queria que fosse, porque sem ele, as conexões de multiplexação terminam quando a conexão inicial morre.

Eu contornei isso com um script Monit rápido e sujo no host de conexão.

check process ssh-control
        matching "MNn"
        start program = "/usr/bin/ssh -MNn destination" as uid username
        stop program = "/usr/bin/pkill -u username ssh"

Onde está o sistema ao qual estou me conectando e é a conta de serviço do sistema de replicação de aplicativo ( admin neste caso).

O ssh -M é usado para o modo mestre e o compartilhamento de conexão SSH.

-M Places the ssh client into “master” mode for connection sharing. Multiple -M options places ssh into “master” mode with confirmation required before slave connections are accepted.

O resultado de tudo isso é logs limpos ... e que a enxurrada de comandos ssh iniciados pelo servidor de replicação todos reutilizam o soquete aberto criado pela conexão mestre.

Uma vez que este recurso faça parte do pacote EL6 OpenSSH, poderei me livrar do script Monit e usar apenas o parâmetro ControlPersist .

    
por 18.08.2014 / 16:34