抑制 Paramiko stderr 输出

suppress Paramiko stderr output

我正在使用 paramiko 作为 python 脚本的一部分。在此脚本中,我还使用 python 的日志记录模块来记录日志文件和标准错误。只有我通过 logger.debug、logger.info 等指定的内容才会显示在控制台中。不幸的是,当我按如下方式调用 paramiko 时:

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=host, port=port, username=user, key_filename=keyfile)

以下消息输出到 stderr:

CryptographyDeprecationWarning:签名者和验证者已被弃用。请改为使用签名和验证。

我试图通过将 paramiko 的日志记录更改为 CRITICAL 来抑制这种情况:

logging.getLogger("paramiko").setLevel(logging.CRITICAL)

以及将其定向到这样的文件:

paramiko.util.log_to_file('filename.log')

但都不起作用。

有没有办法让这个停止显示为控制台输出?

这个问题在 paramiko==2.4.2 中仍然存在;显然是 for the next 2.x release,所以很可能是 2.5。

他们陈述的问题本质上是,"older paramiko, newer cryptography"

在此期间,您可以试试这个来修复它:

pip uninstall cryptography ; pip install cryptography==$DESIRED_VERSION

$DESIRED_VERSION 替换为 the version you need。 paramiko 2.4.2 于 2018 年 9 月发布,看起来兼容的最新版本是 cryptography 2.3.1。在我的设置中,它有效。

这实质上意味着降级您的加密包,所以在您这样做之前请三思。