web-dev-qa-db-ja.com

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

私は多くのdrupalサイトを管理しており、drushを使用していくつかのものを自動化しようとしています。Drushrunは、サイトエイリアスの構成で指定されたオプションを使用して、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.

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

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

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

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

編集:

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

10
mc0e

メッセージの条件

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

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

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

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

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

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

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

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

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

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

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

8
Dereckson