并行运行多个SSH会话

时间:2018-04-26 12:19:42

标签: bash shell expect

我有一个脚本可以帮助我在需要时更新思科设备的IOS。它运行正常,我对脚本本身没有任何问题,除了它一次只做一个设备这一事实。

我是否可以通过研究使脚本不对称运行,以便一次可以进行多个会话?

该脚本包含一个expect脚本,其设置如下:

set timeout 6
set hostname [lindex argv $0]
set password [lindex argv $1]

spawn ssh $hostname

expect "TACACS*:"
send "$password\r"

expect "#"
send "term length 0\r"
< other similar commands >

interact

主bash脚本的工作原理如下:

IP=$(cat ./iphosts)

read -p "Please enter your TACACS Password:" password

for i in $IP
do
     expect 01.exp $i $password | tee -a bulk.log
done

interact

expect和.sh脚本对每个脚本都有一点点,但那些通常发布脚本完成任务,如报告或其他命令。

感谢您提供有关此信息的任何信息!

1 个答案:

答案 0 :(得分:1)

您可以使用xargs工具并行启动多个进程。例如:

#!/bin/sh

read -p "Please enter your TACACS Password:" password
xargs -IADDRESS -P4 expect 01.exp ADDRESS $password < ./iphosts

这使用-P的{​​{1}}参数一次最多运行4个进程。您可以将参数向上扩展到xargs以并行运行更多进程。

但是这里有一个问题:你在你的期望脚本中调用-P,这表明脚本在运行时期望(可能需要)来自你的交互式输入。如果是这种情况,此处提供的解决方案将无效。您需要重写interact脚本,以便它不需要任何用户交互。

您可能还想调查像Ansible这样的工具,其中(a)默认执行此类并行执行,(b)显式支持for configuring a variety of network devices