tcl是否希望同时使用ssh会话?

tcl是否希望同时使用ssh会话?,tcl,expect,Tcl,Expect,在返回到第一个ssh会话并重复该过程之前,是否可以打开一个ssh会话,在此会话中运行一个命令,然后打开另一个ssh会话并在此新的ssh会话上运行一些命令 目的是在第一个会话中从无线控制器释放接入点,并检查它是否已在第二个会话中迁移到另一个控制器。因为有很多接入点,我想自动化这个过程 如果spawn ssh仅仅从shell启动一个ssh会话,那么它只能在关闭它并启动另一个会话之前启动一个会话。从我的测试来看,这就是正在发生的事情,我似乎不能同时打开两个ssh会话,并使用expect-I$spawn

在返回到第一个ssh会话并重复该过程之前,是否可以打开一个ssh会话,在此会话中运行一个命令,然后打开另一个ssh会话并在此新的ssh会话上运行一些命令

目的是在第一个会话中从无线控制器释放接入点,并检查它是否已在第二个会话中迁移到另一个控制器。因为有很多接入点,我想自动化这个过程


如果spawn ssh仅仅从shell启动一个ssh会话,那么它只能在关闭它并启动另一个会话之前启动一个会话。从我的测试来看,这就是正在发生的事情,我似乎不能同时打开两个ssh会话,并使用expect-I$spawn\u id cmd send-I$spawn\u id cmd来选择我要通过脚本与哪个ssh会话交互。

是的,这绝对是可能的。以下代码连接到我的2个raspberry PI,并在它们之间交替运行命令:

set host1 pi1
set host2 pi2
set prompt {~ $* }

spawn ssh $host1
set id1 $spawn_id
expect -i $id1 $prompt
spawn ssh $host2
set id2 $spawn_id
expect -i $id2 $prompt

exp_send -i $id1 "uname -a\r"
expect -i $id1 $prompt
exp_send -i $id2 "uname -a\r"
expect -i $id2 $prompt

exp_send -i $id1 "uptime\r"
expect -i $id1 $prompt
exp_send -i $id2 "uptime\r"
expect -i $id2 $prompt

如果你没有做到这一点,你可能做错了什么。但是,由于您没有共享实际代码,很难说是什么。

通过在脚本顶部使用exp_internal-f mylog.txt 1,我成功地启用了调试并将其捕获到一个文件中。这有助于理解向每个进程发送了哪些命令,每个进程需要哪些命令,以及是否存在匹配项。最终,我犯了一个错误,即执行expect-I$my_spawn_id{“check”{send-I$my_span_id“cmd},我应该在每个“check”前面加前缀“使用-i$my_spawn_id。很抱歉格式化,需要学习如何在注释中使用回车符。”。