tcl 期望可能同时进行 ssh 会话吗?

tcl expect simultaneous ssh sessions possible?

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

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

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

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

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

如果您没有做到这一点,您可能做错了什么。但是因为你没有分享你的实际代码,所以很难说是什么。