Ich verwalte viele Drupal-Sites und versuche, einige Dinge mit Drush zu automatisieren. Drush run local ruft drush auf dem Remote-Host über ssh auf, wobei die in der Konfiguration für den Site-Alias angegebenen Optionen verwendet werden. Ich mache ziemlich viele dieser Aufrufe. Um dies zu beschleunigen, verwende ich dauerhafte SSH-Verbindungen mit der SSH-Konfiguration wie folgt:
Host *
# see http://www.revsys.com/writings/quicktips/ssh-faster-connections.html
ControlMaster auto
ControlPath ~/tmp/%r@%h:%p
ControlPersist 3600
Ich bekomme eine Beschleunigung, aber ich bekomme auch Nachrichten wie folgt:
$ drush @alias drupal-directory webform
/var/local/www/example.com/htdocs/sites/all/modules/contrib/webform
Shared connection to 12.34.56.78 closed.
Die Nachricht über die gemeinsam genutzte Verbindung befindet sich zusammen mit der gewünschten Ausgabe auf stdout (ernsthaft? Warum nicht stderr?). Daher verursacht sie Probleme, wenn ich versuche, die Ausgabe in meinen Skripten zu erfassen:
directory=$(drush @$alias drupal-directory $module)
Ich erwarte, dass die Master-Verbindung eine ist, die ich bereits geöffnet hatte, und sie sieht nicht so geschlossen aus. Vielleicht macht drush diese neue Verbindung explizit zu einer Master-Verbindung und schließt sie? Gibt es in jedem Fall eine Möglichkeit, die Meldung über das Schließen der Verbindung zu unterdrücken?
[Dieses Problem befindet sich in einem Drupal / Drush-Kontext, aber ich denke, es geht im Wesentlichen um ssh. Ist das dann die richtige Seite?]
BEARBEITEN:
Es sieht so aus, als ob das Problem spezifisch dafür ist, wo die -t
Option für ssh verwendet wird. Ich verwende dies, weil SVN-Passwörter an verschiedenen Stellen eingegeben werden müssen und ohne sie -t
die Passwortabfragen nicht angezeigt werden. Vielleicht gibt es eine andere Möglichkeit, um zu verhindern, dass diese Eingabeaufforderungen verloren gehen?
quelle
directory=$(drush @$alias drupal-directory $module | grep -v "Shared connection to")
genug?Antworten:
Bedingungen der Nachricht
Gemäß diesem Teil des tragbaren OpenSSH-Quellcodes sind zwei Bedingungen erforderlich, um diese Nachricht zu drucken:
Lösung zum Unterdrücken der Nachricht
-o LogLevel=QUIET
Ihrerssh
Befehlszeile hinzu.LogLevel QUIET
unter den entsprechendenHost
Blöcken hinzu.Zum Beispiel verwende ich diese Zeile in einem sh-Skript, das eine Verbindung zu mehreren Servern herstellt, um Docker-Befehle auszuführen, von denen einige möglicherweise interaktiv sind:
SSH = "ssh -t -o LogLevel=QUIET"
Warnung: Jeder Fehler wird verworfen
Ein Nachteil dieser Methode ist, dass dadurch auch schwerwiegende SSH-Fehler unterdrückt werden.
Alternative: Protokollieren Sie die stderr-Ausgabe, anstatt sie zu drucken
Wenn stderr immer noch als wichtig erachtet wird, besteht eine Alternative darin, stderr stattdessen mit auf syslog umzuleiten
ssh -t -y
(aber dann würden Sie Ihr Protokoll mit all diesenShared connection to <host> closed
Nachrichten überfluten ).quelle
-o LogLevel=QUIET
ist eine Standardpraxis in Remote-Tools für die Automatisierung.