0

I have machines stored in host.txt file. I need to read each line from file and do the ssh for it and run the linux command "cat /etc/redhat-release". Store the output along with machine name in the output file. Not sure if exit is also required after running ssh command.

script:

#!/bin/bash
while read line do
    sshpass -p 'abc123' ssh -o StrictHostKeyChecking=no ${line}
    echo `cat /etc/redhat-release` >> logfile.txt
done < host.txt 

Above one is not working. Please help. Thanks in advance.

Mohan
  • 59
  • 8

1 Answers1

1
while IFS= read -r server; do
  sshpass -p 'abc123' ssh -o StrictHostKeyChecking=no "$server" cat /etc/redhat-release <&-
done <host.txt >logfile.txt

or with GNU xargs with -P option with 10 processes:

xargs -P10 -d '\n' -i{} sshpass -p 'abc123' ssh -o StrictHostKeyChecking=no {} cat /etc/redhat-release <host.txt >logfile.txt

Research: https://mywiki.wooledge.org/BashFAQ/001 While loop stops reading after the first line in Bash and ssh breaks out of while-loop in bash https://mywiki.wooledge.org/BashGuide/Practices#Quoting . Check your scripts with https://www.shellcheck.net/ .

KamilCuk
  • 120,984
  • 8
  • 59
  • 111