Evita i messaggi "Connessione condivisa a <host> chiuso"


11

Sto gestendo molti siti di Drupal e sto cercando di automatizzare alcune cose usando Drush. Drush run localmente chiama drush sull'host remoto tramite ssh usando le opzioni specificate nella configurazione per l'alias del sito. Sto facendo un sacco di queste chiamate, quindi per accelerare uso connessioni ssh persistenti con config ssh in questo modo:

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

Ottengo un'accelerazione, ma ricevo anche messaggi in questo modo:

$ drush @alias drupal-directory webform 

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

Il messaggio sulla connessione condivisa è su stdout, insieme all'output che voglio (sul serio? Perché non stderr?), Quindi sta causando problemi quando provo a catturare l'output nei miei script:

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

Mi aspetto che la connessione principale sia quella che avevo già aperto, e non sembra chiusa. Quindi forse Drush sta esplicitamente rendendo questa nuova connessione una master e chiudendola? In ogni caso, c'è un modo per sopprimere il messaggio sulla chiusura della connessione?

[Questo problema è in un contesto drupal / drush, ma penso che si tratti fondamentalmente di ssh. È questo il sito giusto allora?]

MODIFICARE:

Sembra che il problema sia specifico di dove -tè in uso l' opzione di ssh. Sto usando questo perché le password svn devono essere inserite in vari punti e senza -t, i prompt delle password non vengono visualizzati. Forse c'è un altro modo per impedire la perdita di quei messaggi?


1
1) Sì, sembra certamente che tu sia nel posto giusto. 2) sarebbe directory=$(drush @$alias drupal-directory $module | grep -v "Shared connection to")sufficiente un brutto hack ?
terdon

Questo è più o meno quello che sto facendo al momento. Solo che è più cattivo di quello con i feed di linea e roba da affrontare, ed è in molti posti, quindi spero davvero che ci sia un modo per ottenere ssh per stare tranquilli.
mc0e

La "Connessione condivisa a 12.34.56.78 chiusa." l'output del messaggio è in realtà su stderr, non su stdout.
Dereckson,

@Dereckson - a meno che qualcuno non l'abbia corretto.
MC0e

Risposte:


9

Condizioni del messaggio

Secondo questa parte del codice sorgente portatile OpenSSH , per stampare questo messaggio sono necessarie due condizioni:

  • l'allocazione pseudo-tty è abilitata (-t), come hai già notato
  • il livello del registro deve essere diverso da QUIET

Soluzione per sopprimere il messaggio

  • Aggiungi -o LogLevel=QUIETalla tua sshriga di comando.
  • Modifica ~ / .ssh / config e aggiungi LogLevel QUIETsotto Hostblocchi pertinenti .

Ad esempio, utilizzo questa riga in uno script sh che si collega a diversi server per eseguire comandi Docker, alcuni potenzialmente interattivi:

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

Attenzione: qualsiasi errore viene eliminato

Uno svantaggio di questo metodo è che elimina anche gli errori fatali di SSH.

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

Alternativa: registra l'output di stderr invece di stamparlo

Se stderr è ancora considerato importante da ottenere, un'alternativa è reindirizzare invece stderr a syslog con ssh -t -y(ma poi inonderesti il ​​tuo registro con tutti quei Shared connection to <host> closedmessaggi).


2
Secondo quella fonte, il messaggio va a stderr - forse è un cambiamento rispetto alla versione in uso dell'interrogatore? In tal caso, forse vale la pena considerare un aggiornamento.
Toby Speight,

Non voglio davvero i messaggi "Connessione condivisa a <host> chiuso", ma in genere voglio vedere i messaggi di errore su stderr. Il problema non è con ssh, è con drush quando si opera in remoto. Lo stderr del comando drush remoto si sta esaurendo allo stdout del comando drush locale.
mc0e,

-o LogLevel=QUIETè una pratica standard negli strumenti remoti di automazione.
Dereckson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.