spawn:如何在expect脚本中将参数传递给spawn?

时间:2017-04-07 12:21:41

标签: linux bash ssh parameter-passing expect

我只是有一个更大的 bash-script ,我偶然发现了一个问题,使用 ssh 连接到另一台计算机。第一次访问那个(总是,真的;))因此要求主机的真实性[192.168.120.170]:9022([192.168.120.170]:9022)'无法建立。 您确定要继续连接(是/否)吗?

所以我尝试使用附加 expect / spawn脚本来回答这个问题。

所以我有两个文件: 的 deploy.sh

#!/bin/bash
... Some functions and more
# call expect script to get a first time onto the target
/usr/bin/expect -d -f ./deployImage_helper.exp -- -p 9022 root@192.168.120.170

deploy_helper.exp

#!/usr/bin/env expect  -f
set args [lrange $argv 1 end]
spawn ssh {*}$args
expect "The authenticity of host'[192.168.120.170]([192.168.120.170]:9022)' can't be established."
send "yes"

如果我运行 deploy.sh ,我会收到错误消息:无效的命令名称" 192.168.120.170"

不知怎的,我不会产生 ssh 的产卵。

任何帮助都将不胜感激。

修改

更改 deploy.sh 第4行

1 个答案:

答案 0 :(得分:2)

set args [lrange $argv 1 end]
spawn ssh {*}$args
expect -re {The authenticity of .* can't be established.} {
    send "yes"
}

interact

内部""变量和方括号[](在括号内评估命令并放置结果)将被展开和评估。您需要引用方括号\[或使用{}代替""。 顺便说一句,你可以通过openssh选项来解决这个问题(仅显示警告):

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 9022 root@192.168.120.170