【问题标题】:Perl Net::SSH2 in pty mode and EOFPerl Net::SSH2 在 pty 模式和 EOF
【发布时间】:2017-02-22 06:50:35
【问题描述】:

我正在使用 perl Net::SSH2 v0.48 并尝试执行从标准输入读取输入的远程脚本。此连接的通道使用 vt100 pty 来满足某些特定要求。将数据写入标准输入后,我还调用了$channel->send_eof();。但是远程脚本似乎根本没有收到任何 EOF 字符。远程脚本在 python 中并从标准输入读取,如sys.stdin.read(),它挂起直到它得到一个 EOF。当我禁用 pty 或将 chr(4) 附加到作为 EOF 字符的输入有效负载时,这个问题就会得到解决。

问题:

  1. 知道为什么send_eof() 不起作用吗?
  2. 解决此问题的最佳方法是什么?
  3. 如果启用了 pty,我可以假设 send_eof() 不是必需的吗?

附:我现在不包含任何代码 sn-p 因为生产代码太复杂而无法解释问题,并且需要一些时间来准备最小代码的工作版本。但我会尽快用代码示例更新我的问题。

【问题讨论】:

  • 0.48 版已经很老了,而且漏洞百出。您应该使用更新的。

标签: perl ssh eof pty


【解决方案1】:

如果启用了 pty,我可以假设 send_eof() 不需要吗?

来自docs

send_eof

向远程端发送 EOF。

发送 EOF 后,不能再向远程发送数据 处理 STDIN 通道。

请注意,如果为频道请求 PTY,则远程服务器可能会忽略 EOF。

【讨论】:

  • EOF may be ignored by the remote server,这是否意味着即使我将 EOF 作为输入数据的一部分附加也可能会被忽略?显然这并没有发生,但似乎可能有更多信息可以全面了解。
  • Tty 设备不允许只关闭连接的一侧。这就是为什么忽略通道级别的 EOF 请求。
猜你喜欢
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 2016-09-26
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
相关资源
最近更新 更多