bash script to ssh multiple servers in a Loop and issue commands

bash, ssh

Solution

The problem with this code is that `ssh` starts reading data from stdin, which you intended for `read line`. You can tell `ssh` to read from something else instead, like `/dev/null`, to avoid eating all the other hostnames.

#!/bin/bash
while read line
do
    ssh abc_def@"$line" "hostname; ls;" < /dev/null
done < "$1"

Problem

I have a text file in which I have a list of servers. I'm trying to read the server one by one from the file, `SSH` in the server and execute `ls` to see the directory contents. My loop runs just once when I run the `SSH` command, however, for `SCP` it runs for all servers in the text file and exits, I want the loop to run till the end of text file for SSH. Following is my bash script, how can I make it run for all the servers in the text file while doing `SSH`? ``` #!/bin/bash while read line do name=$line ssh abc_def@$line "hostname; ls;" # scp /home/zahaib/nodes/fpl_* abc_def@$line:/home/abc_def/ done < $1 ``` I run the script as `$ ./script.sh hostnames.txt`

Original source