使用生成SSH的程序并不能正常工作

时间:2012-03-13 06:53:10

标签: tcl expect

我有一个期望脚本,当使用一个程序产生SSH时,以后使用expect不起作用,当直接使用ssh spawn时,期望的东西似乎工作正常。 知道这里有什么不妥吗?

我在其他情况下使用相同的代码段并且工作正常。

proc sshLogin {serverName userName password} {
  global logfd
  set timeout 10
  logMessage "Connecting to  server = $serverName, please wait..."
  log_user 0
  spawn -noecho ssh -X "$userName\@$serverName"
  expect { 
    "password:" {
      send "$password\r"
      expect {
        "]#" {
          log_user 1
          logMessage "Logged in to Server = $serverName"
          return 1
        }
        "Permission denied" {
          log_user 1
          logMessage "Incorrect password!"
        }
      }
    }
    timeout {
      log_user 1
      logMessage "Connection to $serverName timed out"
    }
    eof {
      log_user 1
      logMessage "Connection to $serverName failed!"
    }
  }
  return 0
}

1 个答案:

答案 0 :(得分:3)

您还应通过添加以下内容声明spawn_id是您的过程中的全局变量:

global spawn_id

或将global logfd更改为:

global logfd spawn_id

这是因为spawn_id变量的当前值用于确定正在控制的内容(如果您希望控制两个子进程,则至关重要)。期望尝试做一些“聪明”的事情来处理你在没有声明事情的情况下将expect / send调用放在一个过程中的情况,但它不是一个非常可靠的方法,它不起作用与spawn本身:你必须明确(在使用程序时无论如何这是一个好主意)。