避免显示“与<host>的共享连接已关闭”消息


11

我正在管理许多drupal网站,并尝试使用drush自动化一些操作。使用站点别名的配置中指定的选项,Drush通过ssh在远程主机上本地调用drush。我进行了大量此类调用,因此为了加快速度,我将持久性ssh连接与ssh config一起使用,如下所示:

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)

我希望主连接是我已经打开的连接,但看起来并没有关闭。那么,也许匆匆忙忙地明确地使这个新连接成为主连接并关闭它?无论如何,有没有办法抑制有关连接关闭的消息?

[这个问题是在drupal / drush上下文中,但是我认为它本质上是关于ssh的。这是正确的网站吗?]

编辑:

看来问题是特定-t于ssh选项的使用位置。我之所以使用它,是因为需要在各个点输入svn密码,如果没有-t,则不会显示密码提示。也许还有另一种方法可以阻止这些提示丢失?


1
1)是的,听起来确实像您来对地方了。2)像这样的丑陋hack directory=$(drush @$alias drupal-directory $module | grep -v "Shared connection to")就足够了吗?
terdon

这就是我目前正在做的事情。只是比起换行符和要处理的东西还更糟糕,而且它存在于很多地方,所以我真的希望有某种方法可以使ssh变得更安静。
mc0e 2015年

“到12.34.56.78的共享连接已关闭。” 消息输出实际上是在stderr而不是stdout上。
德里克森

@Dereckson-除非有人修复了它,否则不会。
mc0e

Answers:


9

留言条件

根据OpenSSH可移植源代码的这一部分,需要两个条件来打印此消息:

  • 正如您已经注意到的,伪-tty分配已启用(-t)
  • 日志级别必须不同于QUIET

禁止显示消息的解决方案

  • 添加-o LogLevel=QUIET到您的ssh命令行。
  • 编辑〜/ .ssh / config并LogLevel QUIET在相关Host块下添加。

例如,我在sh脚本中使用此行,该脚本连接到多个服务器以运行Docker命令,其中一些可能是交互式的:

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

我真的不希望“与<host>的共享连接已关闭”消息,但是通常我确实希望在stderr上看到错误消息。问题不在于ssh,而在于远程操作时的草率。在本地drush命令的标准输出上,远程drush命令的stderr正在关闭。
mc0e

-o LogLevel=QUIET是自动化远程工具的标准做法。
Dereckson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.