Я храню в файле с именем ssh_hosts.txt список имен хостов. В сценарии оболочки я перебираю имена хостов в ssh_hosts.txt и выполняю команду на указанном хосте через SSH. Скрипт оболочки показан ниже.
Проблема в том, что скрипт завершает работу после обработки первого хоста. Но если я сделаю что-то кроме выполнения команды на указанном хосте через ssh, сценарий будет выполнен до конца.
В приведенном ниже примере я закомментировал вызов ssh и заменил его простым эхом текущего имени хоста. Это будет работать до конца.
Я выполняю этот скрипт из оболочки bash, работающей под следующей версией Cygwin для Windows 7:
$ uname -a
CYGWIN_NT-6.1 myHostname 1.7.16(0.262/5/3) 2012-07-20 22:55 i686 Cygwin
Эти версии SSH участвуют:
$ ssh -V
OpenSSH_6.0p1, OpenSSL 1.0.1c 10 May 2012
$ ssh myUsername@remoteHost 'ssh -V'
myUsername@remoteHost password:
OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016
Вот сценарий оболочки:
#!/bin/bash
if [[ $# -ne 1 ]]; then
echo "Usage: $(basename $0) <user name>"
exit 1
fi
USER="$1"
while IFS='' read -r ssh_host || [[ -n "$ssh_host" ]];
do
# This line will execute for all hosts listed in ssh_hosts.txt.
echo $ssh_host
# This line will execute for *only the first* host in ssh_hosts.txt.
# ssh $USER@$ssh_host 'echo $(whoami)@$(hostname)'
done < ssh_hosts.txt
Как я могу заставить этот сценарий оболочки выполняться на всех хостах в ssh_hosts.txt, а не только на первом хосте?