exp_send截断命令的原因

时间:2014-01-08 18:36:16

标签: tcl expect

我有一个使用Expect与多台PC交互的基础设施(一些是Windows 7 [通过cygwin],另一些是Ubuntu 12)。

有时,expect命令会挂起,直到达到超时。 然后,我注意到并非所有命令都已发送到目标PC - 我随exp_send发送的字符串被任意截断。

例如,如果提示字符串为root@myPC:/#且命令为echo "Hello World!",那么在expect_out(buffer)中我可能会看到如下内容:

echo "Hroot@myPC:/#

我确认该命令尚未在目标PC中执行。

你知道发生这种情况的可能原因是什么吗? 另外,是否可以防止这种情况?

Expect脚本作为Tcl 8.5脚本的一部分执行。


编辑#1,11.02.2014 15:04 UTC:

请参阅this debug output of expect(为了便于阅读而修剪)。

您可以看到exp_send发送了字符(\r),但没有收到任何内容 这主要发生在向ssh提供密码之后。 我认为它可能与this problem有关 - 对于某些NAT路由器,ssh挂起,因为它在验证用户之后立即设置IP数据包的TOS字段。 这是ssh的(级别3)调试输出:

root@1.2.3.4 's password: 
debug3: packet_send2: adding 64 (len 55 padlen 9 extra_pad 64)

debug2: we sent a password packet, wait for reply

pa$$w0rd

debug1: Authentication succeeded (password).

Authenticated to 1.2.3.4  ([1.2.3.4]:22).

debug1: channel 0: new [client-session]

debug3: ssh_session2_open: channel_new: 0

debug2: channel 0: send open

debug1: Requesting no-more-sessions@openssh.com

debug1: Entering interactive session.

debug2: callback start
debug2: client_session2_setup: id 0
debug2: fd 3 setting TCP_NODELAY
debug3: packet_set_tos: set IP_TOS 0x10
debug2: channel 0: request pty-req confirm 1

0 个答案:

没有答案