script running ssh commands (via loop) exiting after first iteration
Linux - ServerThis forum is for the discussion of Linux Software used in a server related context.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
script running ssh commands (via loop) exiting after first iteration
Hello everyone,
One of my servers needs to issue an "apt-get update" command on each of the clients in a lab. However, after the first update, it exits. In trying to replicate the problem with a simpler script, I created the following which fetches the listings of multiple directories from a client:
NUM=0
cat paths | while read DIR; do
ssh server-name ls $DIR > /tmp/$NUM.txt
NUM=`expr $NUM + 1`
done
Again, after the first iteration, the script exists. I tried the following line too, but it made no difference:
bash -c ssh server-name ls $DIR > /tmp/$NUM.txt
The only thing that worked so far is this
xterm -e ssh server-name ls $DIR > /tmp/$NUM.txt
Of course, this is far from ideal since a GUI gets involved.
Any thoughts?
Thanks much.
Click here to see the post LQ members have rated as the most helpful post in this thread.
One of my servers needs to issue an "apt-get update" command on each of the clients in a lab.
Try below:
Code:
#!/bin/bash
# Linux/UNIX box with ssh key based login
CLIENTS="192.168.1.1 192.168.1.2 192.168.1.3"
# SSH User name
USR="root"
# connect each client and run apt-get update
for host in $CLIENTS
do
ssh $USR@$host apt-get update
done
The problem is that the standard input of your local shell becomes the standard input of the remote command. This is the way ssh works. Every time the remote command terminates, ssh sends a SIGTTIN signal to the local shell, which results in terminating the standard input of the loop. To prevent this behaviour, you can try the -n option of ssh, that explicitly redirects the standard input from /dev/null, leaving the standard input of the local shell untouched.
The problem is that the standard input of your local shell becomes the standard input of the remote command. This is the way ssh works. Every time the remote command terminates, ssh sends a SIGTTIN signal to the local shell, which results in terminating the standard input of the loop. To prevent this behaviour, you can try the -n option of ssh, that explicitly redirects the standard input from /dev/null, leaving the standard input of the local shell untouched.
This is exactly what I had needed. Thanks very much.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.