在“模拟”命令后按下“是”几下

2024-10-01 04:59:41 发布

您现在位置:Python中文网/ 问答频道 /正文

生成密钥/证书时,应按几次“回车”键,最后按“是”。怎么用这样的代码来做呢?在

buildkey = ["printf '\n\n\n\n\n\n\n\n\n\n ' | /etc/openvpn/easy-rsa/build-key"]
runBuildKey = subprocess.Popen(buildkey, shell=True )

Tags: key代码buildeasyetc密钥shellrsa
1条回答
网友
1楼 · 发布于 2024-10-01 04:59:41

不要在这里编辑stdin。相反,请打开openssl.cnf,并对其进行修改,以从环境中获取所需的所有输入,如下所示:

[ req_distinguished_name ]
countryName_default             = $ENV::SSL_countryName
stateOrProvinceName_default     = $ENV::SSL_stateOrProvinenceName

……等等。完成后,在使用参数-batch调用build-key之前,在您的环境中设置变量。在bash中,可能是这样的:

^{pr2}$

或者,在Python中,可以通过subprocess.Popen的参数执行相同的操作:

subprocess.call(['/etc/openvpn/easy-rsa/build-key', '-batch'], env={
    'SSL_countryName': 'foo',
    'SSL_stateOrProvinenceName': 'bar',
    # ...and so forth for any other $ENV::* setting you want to override
}, stdin=open('/dev/null', 'r'))

但是,如果真的想要为stdin传递一个自定义流,则可以在不使用任何shell管道的情况下执行此操作:

p = subprocess.Popen(['/etc/openvpn/easy-rsa/build-key'], stdin=subprocess.PIPE)
p.communicate('\n'.join(['', '', '', '', '', 'yes', '']))
#                        ^^
#   use one of these for each item you want to press enter to before the "yes"

相关问题 更多 >