【问题标题】:spawn_id: spawn id exp6 not openspawn_id: spawn id exp6 未打开
【发布时间】:2011-09-20 19:24:28
【问题描述】:

我知道这里已经提到了这个问题,但是解决方案对我不起作用。

我有这个脚本(我们将其命名为 myscript.sh),它在远程环境中生成一个进程并且应该与之交互。

#!/usr/bin/expect
log_user 0
set timeout 10
spawn ssh -o PubkeyAuthentication=no [lindex $argv 0] -n [lindex $argv 1]
expect "password:" {send "mypassword\r"}
expect "Continue to run (y/n)" {send "n\r"}
interact

当我在本地环境中调用这个脚本时...

myscript.sh user@host "command1;./command2 parameter1 parameter2"

我在第 7 行(交互)收到上述错误

有什么想法吗??

【问题讨论】:

  • 您将远程命令作为参数传递给 ssh,因此 ssh 会话将在远程命令完成时结束。不会有任何互动。
  • 是的,但是该远程命令在“继续运行 (y/n)”得到输入之前不应结束。在传递“y\r”之后,它应该再运行大约 2 分钟......不应该交互命令将远程命令的输出转发到我的标准输出,直到执行结束?
  • 确定您正在以良好的状态进入[交互],而不仅仅是超时?你知道如何调试 Expect 对话吗?
  • 1.以wiki.tcl.tk/3173开头; 2. 确保你已经解决了 Glenn 的观察。更多细节,当天晚些时候。
  • exp_internal 1 ;# 您将能够看到生成的进程中的内容。在尝试调试时也有 log_user 0 是......适得其反。

标签: linux shell scripting expect


【解决方案1】:

我怀疑期望无法找出(匹配)您发送的模式。

expect "password:" {send "mypassword\r"}
expect "Continue to run (y/n)" {send "n\r"}

再次检查“密码:”和“继续运行 (y/n)”的大写字母是否正确。

如果还是出现同样的错误,可以尝试使用正则表达式。

【讨论】:

    【解决方案2】:

    尝试在没有脚本的情况下进行正常的 ssh。看看它是否有效。有时远程主机标识发生变化,主机有了新的 ip 或新的密钥。然后使用ssh-keygen -f ~/.ssh/known_hosts -R old_host 或类似的东西删除旧密钥会有所帮助。

    【讨论】:

      【解决方案3】:

      我遇到了这个问题,原因是使用了错误的端口。

      【讨论】:

      【解决方案4】:

      我也遇到了这个问题,但这是由于我为不相关的项目创建/编辑了以下文件:

      ~/.ssh/config
      

      删除后,我的所有脚本都开始工作,并且我的期望文件不再出现该问题。

      【讨论】:

      • 对于可能看到此答案的未来读者:请不要删除~/.ssh/config,它不会神奇地修复错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 2014-11-13
      • 2016-11-05
      相关资源
      最近更新 更多