【发布时间】:2020-06-10 15:41:55
【问题描述】:
我有一个 python 脚本,它使用subprocess.Popen 来启动一个目标程序:一个网络服务器。我想与目标进行交互,所以我将stdin、stdout 和stderr 分配给管道,现在我可以对这些管道进行读写了。
现在,网络服务器链接 OpenSSL 库以进行 TLS 处理。作为 TLS 处理的一部分,它会打开一个证书并提示输入密码。通常,在输入密码并按回车后,网络服务器开始提供服务。现在,您可能已经猜到了,我想从 python 脚本中输入这个密码。通常,我需要做的是写入服务器的stdin。但是,有一个问题。 OpenSSL在提示和读取密码时,不使用stdin/stdout。它会打开 /dev/tty 并使用它。结果,我必须输入密码并手动输入。
下图说明情况。
在下面,您可以看到服务器的lsof 输出的sn-p:
memcached 25279 USER 0r FIFO 0,13 0t0 7771739 pipe
memcached 25279 USER 1w FIFO 0,13 0t0 7771740 pipe
memcached 25279 USER 2w FIFO 0,13 0t0 7771740 pipe
memcached 25279 USER 3r REG 8,1 3414 3414276 ....key.pem
memcached 25279 USER 4r CHR 5,0 0t0 13 /dev/tty
memcached 25279 USER 5w CHR 5,0 0t0 13 /dev/tty
有没有办法拦截服务器对/dev/tty的调用,以便我可以直接从脚本中写入?
【问题讨论】:
标签: python openssl subprocess tty