Python Shell脚本。链Unix OpenSSL命令

问题描述 投票:2回答:2

[我正在尝试编写一个简单的Python Shell脚本,它将接受用户输入的服务器名称和端口号,并将其路由到显示SSL证书到期信息的OpenSSL命令中。

我正在使用子流程模块,但是尚不清楚将命令与用户输入的信息链接起来的正确方法。

完整的命令是:

echo | openssl s_client -servername www.google.com -connect www.google.com:443 2>/dev/null | openssl x509 -noout -dates

命令输出(这是我希望脚本输出的内容:

notBefore=May 31 16:57:23 2017 GMT
notAfter=Aug 23 16:32:00 2017 GMT

我的代码:

#!/usr/bin/env python
import subprocess 

server_name = raw_input("Enter server name: ")
port_number = raw_input("Enter port number: ")

def display_cert_info(servername, portnum):
    pn = str(server_name + ":" + port_number)
    cmd = ["echo", "|", "openssl", "s_client", "-servername", str(servername), "-connect", pn, "2>/dev/null", "|", "openssl", "x509", "-noout", "-dates"]

    info = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    output = info.communicate()[0]
    print(output)

display_cert_info(server_name, port_number)

感谢您的任何帮助!

python shell unix subprocess pyopenssl
2个回答
1
投票

与在外壳中不同,标准输入,标准输出和标准错误均由PopenPopenstdinstdout参数处理。因此,您可以丢弃前两个命令元素(stderr)。然后,您将对管道中的最后一个命令运行separate进程,将第一个命令的输出导入其echo |。通常,在以另一种语言运行时,您无需使用外壳管道,而应使用该语言自己的管道(或流式传输)机制。


0
投票

@@ Han,我知道我想晚点来帮你忙,可能会为时已晚,对此深表歉意,但这是其他寻求该解决方案的人的。我不得不将Popen()和check_output()函数串在一起,如下所示:

stdin

这使我可以快速,轻松地审核我添加到列表中的所有服务器。我的下一个迭代是将监视/警报添加到输出中,再也不会为过期的证书感到惊讶。

© www.soinside.com 2019 - 2024. All rights reserved.