Openssl 产卵分叉过程中预期EOF过早
我有一个相当长/复杂的TCL/Expect脚本,它以CGI和守护程序模式运行Openssl 产卵分叉过程中预期EOF过早,openssl,tcl,expect,tty,ocsp,Openssl,Tcl,Expect,Tty,Ocsp,我有一个相当长/复杂的TCL/Expect脚本,它以CGI和守护程序模式运行openssl ocsp响应程序。该脚本是完整的和功能性的,但是我想使用openssl-OCSP-multi…实现一个多线程的OCSP守护进程,它显示了一些奇怪的行为 TCL 8.6.10 预计5.45.4 OpenSSL 1.1.1g 2020年4月21日 Ubuntu 20.04.1 LTS 5.4.0-42-lowlatency x86_64 下面是我能想到的最简洁的示例代码(另存为ocsp.tcl): 显然,
openssl ocsp
响应程序。该脚本是完整的和功能性的,但是我想使用openssl-OCSP-multi…
实现一个多线程的OCSP守护进程,它显示了一些奇怪的行为
- TCL 8.6.10
- 预计5.45.4
- OpenSSL 1.1.1g 2020年4月21日
- Ubuntu 20.04.1 LTS 5.4.0-42-lowlatency x86_64
ocsp.tcl
):
显然,某些选项将扭曲此输出(调试、内部、跟踪、cmdtrace),但最终结果相同
总结如下:
- shell命令工作:
openssl ocsp-index index.txt-CA.crt-rsigner ocsp.crt-rkey ocsp.key-nmin 300-text-ignore_err-port 2650-timeout 5
- shell
命令工作:multi
openssl ocsp-index index.txt-CA CA.crt-rsigner ocsp.crt-rkey ocsp.key-nmin 300-text-ignorer\u err-port 2650-timeout 5-multi 5
- 在后台运行两个shell命令(
)都有效&
- 这些选项中的任何一个组合都有效:
/ocsp.tcl[sudo][internal][debug][trace][cmdtrace][null][raw][rawinit][forever]
- 运行带有或不带其他选项的
失败,然后点击multi
:Expect:Timeout
/ocsp.tcl multi[internal][debug][trace][cmdtrace][null][rawinit][forever]
- 使用
运行sudo
时,无论是否使用其他选项都有效:multi
/ocsp.tcl multi-sudo[internal][debug][trace][cmdtrace][null][rawinit][forever]
tail-f/var/log/syslog
输出ocsp[]:致命:从父进程组分离时出错:不允许操作
。查看中的显示,这是由失败的setpgid
导致的消息。将不允许的操作描述为:
EPERM-试图将进程移动到不同会话中的进程组中,或者更改调用进程的子进程的进程组ID,并且该子进程处于不同会话中,或者更改会话引导进程的进程组ID(setpgid(),setpgrp())
我现在的位置:
- 熟食/熟食模式无关紧要(
)设置stty_init[raw/cooked];stty[-]raw
- 这不是
或tclsh
问题,但可能是expect问题,特别是expect
spawn
- 希望它不是一个
odity/oversight/bugopenssl ocsp-multi.,
- 这与
如何创建/使用pty/tty/会话有关spawn
在任何组合中都不会产生明显的效果spawn-nottyinit-nottycopy
生成sudo…
,但这是一种黑客行为
我目前正在尝试用以下内容来补充/替换spawn:
set pty_pid [spawn -noecho -pty]; #just create a pty? or do we make one for std[in|out|err]?
stty raw -echo < $spawn_out(slave,name); #don't echo stdin on the new pty?
#stty raw > $spawn_out(slave,name); #raw stdout on the new pty? THIS KILLS CTRL-C
set spawn_pid [exec -- {*}$cmd > $spawn_out(slave,name) < $spawn_out(slave,name) &] #redirect stin/out to the pty?
close -slave; #no idea
set pty_pid[spawn-noecho-pty]#只是创建一个pty?还是我们为性病做一个?
stty raw-echo<$spawn_out(从机,名称)#不要在新pty上重复标准?
#stty raw>$spawn\u out(从机,名称)#新pty上的原始标准?这会杀死CTRL-C
设置spawn_pid[exec--{*}$cmd>$spawn_out(slave,name)<$spawn_out(slave,name)&]#将stin/out重定向到pty?
近奴隶#不知道
…但正如您从片段中所看到的,我不确定具体如何处理这些pty
如果您能帮助-multi
工作,我们将不胜感激
编辑:
- 清理所有内容,以反映所注意到的真正的罪犯(spawn/tty/pty/session/setpgid)
- 对脚本进行了大量重构以进行更多调试,并为每个注释添加了命令输出
- 设置CA、root和OCSP签名证书超出了本文的范围,这本身就是一项巨大的工作。足够详细地介绍它。(发表评论)
index.txt
(以及任何其他需要预先存在的文件)让我试一试吗?用lappend
构建cmd
会更习惯。也许在生成之前立即打印该值(用于调试)可以帮助您找出问题所在?当事情不起作用时会打印哪些错误消息?@DonalFellows-更新脚本以反映您的担忧。没有错误消息,除了EOF消息在-multi
用例中放置了“我们不应该到这里”
@sexpect ExpectforShells-设置CA和OCSP响应程序的代码太多,无法粘贴到此处。查看全面的指南。好奇者和好奇者。你试过打开Expect的调试模式吗?您得到的输出可能与您使用的REs不太匹配。您可以粘贴一个可行的index.txt
(以及任何其他需要预先存在的文件)以便我可以尝试一下吗?使用lappend
构建cmd
会更习惯。也许在生成之前立即打印该值(用于调试)可以帮助您找出问题所在?当事情不起作用时会打印哪些错误消息?@DonalFellows-更新脚本以反映您的担忧。没有错误消息,除了EOF消息在-multi
用例中放置了“我们不应该到这里”
@sexpect ExpectforShells-设置CA和OCSP响应程序的代码太多,无法粘贴到此处。查看全面的指南。好奇者和好奇者。你试过打开Expect的调试模式吗?您得到的输出可能与您使用的分辨率不太匹配。
Expect: Timeout
Expect: Timeout
Expect: Timeout
set pty_pid [spawn -noecho -pty]; #just create a pty? or do we make one for std[in|out|err]?
stty raw -echo < $spawn_out(slave,name); #don't echo stdin on the new pty?
#stty raw > $spawn_out(slave,name); #raw stdout on the new pty? THIS KILLS CTRL-C
set spawn_pid [exec -- {*}$cmd > $spawn_out(slave,name) < $spawn_out(slave,name) &] #redirect stin/out to the pty?
close -slave; #no idea