「<host>への共有接続が閉じられました」というメッセージを回避する


11

私は多くのdrupalサイトを管理していて、drushを使用していくつかのものを自動化しようとしています。Drush runは、サイトエイリアスの設定で指定されたオプションを使用して、ssh経由でリモートホストのdrushをローカルに呼び出します。私はこれらの呼び出しをかなり多くしているので、高速化するために、次のようにssh configで永続的なssh接続を使用します。

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

スピードアップしましたが、次のようなメッセージも表示されます。

$ drush @alias drupal-directory webform 

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

共有接続に関するメッセージは、私が欲しい出力と一緒にstdoutにあります(真剣に?なぜstderrではないのですか?)。そのため、スクリプトで出力をキャプチャしようとすると問題が発生します。

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

マスター接続は既に開いていたはずですが、閉じられているようには見えません。だから、おそらくdrushはこの新しい接続を明示的にマスター接続にして閉じていますか?いずれにせよ、接続の切断に関するメッセージを抑制する方法はありますか?

[この問題はdrupal / drushのコンテキストにありますが、基本的にはsshに関するものだと思います。これは正しいサイトですか?]

編集:

この問題は-t、ssh のオプションが使用されている場所に固有のようです。svnパスワードはさまざまな時点で入力する必要があり-t、パスワードプロンプトが表示されないため、これを使用しています。これらのプロンプトが失われるのを防ぐ別の方法があるのでしょうか?


1
1)はい、確かにあなたは正しい場所にいるように聞こえます。2)醜いハックdirectory=$(drush @$alias drupal-directory $module | grep -v "Shared connection to")で十分でしょうか?
terdon

私が現在やっていることは大体それです。改行やそれに対応するものがあるだけで、それよりも厄介であり、多くの場所にあるので、sshがそれについてただ静かにするためのいくつかの方法があることを本当に望んでいます。
mc0e 2015年

「12.34.56.78への共有接続が閉じられました。」メッセージ出力は、実際にはstdoutではなくstderrにあります。
デレクソン

@Dereckson-誰かが修正していない限り。
mc0e

回答:


9

メッセージの条件

OpenSSHポータブルソースコードのこの部分によると、このメッセージを出力するには2つの条件が必要です。

  • すでに気づいているように、疑似tty割り当てが有効になっている(-t)
  • ログレベルはQUIETとは異なる必要があります

メッセージを抑制するソリューション

  • コマンドラインに追加-o LogLevel=QUIETしますssh
  • 〜/ .ssh / configを編集しLogLevel QUIET、関連するHostブロックの下に追加します。

たとえば、複数のサーバーに接続してDockerコマンドを実行するshスクリプトでこの行を使用します。

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

警告:エラーは破棄されます

この方法の欠点は、SSHの致命的なエラーも抑制されることです。

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

代替方法:stderr出力を出力する代わりにログに記録する

stderrが依然として重要であると考えられる場合は、代わりにstderrをsyslogにリダイレクトする方法がありssh -t -yます(ただし、ログをこれらすべてのShared connection to <host> closedメッセージでフラッディングします)。


2
そのソースによると、メッセージはstderrに送られます-おそらくそれは質問者が使用しているバージョンと比較した変更ですか?もしそうなら、おそらくアップグレードを検討する価値があります。
Toby Speight 2016

「<host>への共有接続を閉じました」というメッセージは本当に必要ありませんが、通常はstderrにエラーメッセージを表示したいと思います。問題はsshではなく、リモートで操作するときのdrushにあります。リモートのdrushコマンドのstderrがローカルのdrushコマンドのstdoutで終了しています。
mc0e

-o LogLevel=QUIETオートメーションリモートツールの標準的な方法です。
デレクソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.