Evite mensagens "Conexão compartilhada com o host fechado"

6

Estou gerenciando muitos sites drupal e tentando automatizar algumas coisas usando o drush. O Drush executado localmente chama drush no host remoto via ssh usando as opções especificadas na configuração do alias do site. Eu estou fazendo muitas dessas chamadas, então para acelerar eu uso conexões ssh persistentes com a configuração ssh da seguinte forma:

Host *
  # see http://www.revsys.com/writings/quicktips/ssh-faster-connections.html
  ControlMaster auto
  ControlPath ~/tmp/%r@%h:%p
  ControlPersist 3600

Eu recebo uma aceleração, mas também recebo mensagens assim:

$ drush @alias drupal-directory webform 

/var/local/www/example.com/htdocs/sites/all/modules/contrib/webform
Shared connection to 12.34.56.78 closed.

A mensagem sobre a conexão compartilhada está no stdout, junto com a saída que eu quero (sério? porque não stderr?), então está causando problemas quando tento capturar a saída em meus scripts:

directory=$(drush @$alias drupal-directory $module)

Espero que a conexão principal seja uma que eu já tinha aberto, e não parece estar fechada. Então, talvez drush esteja explicitamente fazendo dessa nova conexão um mestre e fechando-a? Em qualquer caso, existe uma maneira de suprimir a mensagem sobre o fechamento da conexão?

[Esta questão está em um contexto drupal / drush, mas acho que é fundamentalmente sobre o ssh. Este é o site certo então?]

EDITAR:

Parece que o problema é específico para onde a opção -t para ssh está em uso. Estou usando isso porque senhas svn precisam ser inseridas em vários pontos, e sem -t , os prompts de senha não são exibidos. Talvez haja outra maneira de impedir que esses avisos sejam perdidos?

    
por mc0e 19.03.2015 / 18:26

1 resposta

5

Condições da mensagem

De acordo com esta parte do código-fonte portátil OpenSSH , duas condições são necessário imprimir esta mensagem:

    A alocação de pseudo-tty
  • está ativada (-t), como você já notou
  • o nível de log deve ser diferente de QUIET

Solução para suprimir a mensagem

  • Adicione -o LogLevel=QUIET à sua linha de comando ssh .
  • Edite ~ / .ssh / config e adicione LogLevel QUIET nos blocos Host relevantes.

Por exemplo, eu uso essa linha em um script sh conectando-se a vários servidores para executar comandos do Docker, alguns potencialmente interativos:

SSH = "ssh -t -o LogLevel=QUIET"

Aviso: qualquer erro é descartado

Uma desvantagem desse método é que isso também suprime erros fatais do SSH.

$ ssh -t -o LogLevel=QUIET notexisting.notld ssh anotherone.notld
$

Alternativa: registra a saída do stderr em vez de imprimi-lo

Se stderr ainda for considerado importante para obter, uma alternativa é redirecionar stderr para syslog, com ssh -t -y (mas, então, você inundaria seu log com todas aquelas Shared connection to <host> closed messages).

    
por 14.05.2015 / 11:22