Запускать несколько сессий SSH параллельно - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть скрипт, который помогает мне обновлять IOS моих устройств Cisco, когда мне это нужно. Он работает нормально, и у меня нет проблем с самим сценарием, за исключением того факта, что он работает только с одним устройством за раз.

Есть ли что-то, что я могу исследовать, чтобы скрипт работал асимметрично, чтобы он мог выполнять несколько сеансов одновременно?

Сценарий состоит из ожидаемого сценария, который настроен следующим образом:

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

Оба сценария, ожидающих и .sh, имеют немного больше для каждого, но обычно они публикуют задачи завершения сценария, такие как отчеты или дополнительные команды.

Спасибо за любую информацию, которую вы можете предоставить по этому поводу!

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете использовать инструмент xargs, чтобы запустить несколько процессов параллельно. Например:

#!/bin/sh

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

Используется аргумент -P для xargs для одновременного запуска до 4 процессов. Вы можете увеличить аргумент до -P для параллельного запуска большего числа процессов.

Но здесь есть проблема: вы вызываете interact в вашем ожидаемом сценарии, который предполагает, что сценарий ожидает (возможно, требует) интерактивного ввода от вас, когда он выполняется. Если это так, решение, представленное здесь, не будет работать. Вам нужно будет переписать сценарий expect, чтобы он не требовал взаимодействия с пользователем.

Возможно, вы также захотите исследовать такой инструмент, как Ansible , который (a) выполняет такого рода параллельное выполнение по умолчанию и (b) имеет явную поддержку для настройки различных сетевых устройств .

...