我有一个脚本可以帮助我在需要时更新思科设备的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脚本对每个脚本都有一点点,但那些通常发布脚本完成任务,如报告或其他命令。
感谢您提供有关此信息的任何信息!
答案 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。