【问题标题】:expect script runs in shell but fails via cgi期望脚本在 shell 中运行但通过 cgi 失败
【发布时间】:2016-12-12 21:55:17
【问题描述】:

我正在运行一个期望脚本,当在命令行调用它时它工作得非常好,但是如果我通过 cgi 运行完全相同的命令,它会在输入密码后失败并给出以下错误

打开终端时出错:未知。与 10.x.x.x 的连接已关闭。 send: spawn id exp8 在执行"send -- "\r"" 时未打开(文件 "./precheck.exp" 第 24 行)

网络服务器是猫鼬,它在我当前的用户下运行 知道有什么问题吗?

【问题讨论】:

  • 你在生成什么程序?

标签: bash cgi expect


【解决方案1】:

CGI 脚本由没有附加 TTY 的守护进程(Web 服务器)运行。但是,密码查询通常在附加的 TTY 上完成。如果一个进程实际上测试 TTY 的存在,if 会发现在用户调用的 shell 脚本中运行和作为 CGI 运行之间的区别。

现在,你能做些什么来解决你的问题?

您可以创建一个 PTY 并将其附加到您的相关进程,这样即使它作为 CGI 脚本运行,它也可以找到一个 TTY。或者您可以尝试说服相关程序从其他地方获取密码。如果可能的话,我建议尝试这种方式。仅仅为了这个而插入一个假的 TTY 可能并不容易,我会认为它是一种 hack。

告诉一个程序,如果没有 TTY 也没关系,然后你去,吃掉那个密码,这是解决问题的好方法。

【讨论】:

  • 嗨,谢谢你,我想我明白你在说什么,但我不明白我该如何解决这个问题。即,如果没有 tty,我如何告诉程序它可以。我会在这里告诉网络服务器哪个程序?还是远程机器上的 ssh?
  • 当然取决于所讨论的程序。我不知道您的期望脚本(因为您没有发布它),所以这将是疯狂的猜测。但通常尝试询问密码的程序也有通过命令行选项获取密码的方法。
  • Alfe,感谢您所做的一切,但是通过将 export TERM=xterm 添加到 cgi 文件,问题得到了解决。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 2022-01-12
  • 2011-07-27
相关资源
最近更新 更多