Need some help in bash scripting with ssh


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need some help in bash scripting with ssh
# 1  
Old 05-14-2012
Need some help in bash scripting with ssh

Hi @ all

I have the following scenario:

As Admin of a cupple of servers I tried to write the following script to figure out, if the machine is up and available and if some directory´s were available. But my script is having some probs, while running. Maybe some of you have a better way to solve the same issue:

Code:
#!/bin/bash
while read server
do
if [ ! -z $server ]
then
        ping -c 1 $server
        if [ $? -eq 0 ] ; then
                echo -e "Das System "$server" ist per Ping erreichbar und wird jetzt abgefragt!"
                echo -e "Das System "$server" ist erreichbar und steht zur Verfuegung" >> erreichbare-server-log.txt
                WLS=$(ssh -f -x -n $server 'ls -d /opt/wls*[0-9] 2>/dev/null|wc -l')
                OHS=$(ssh -f -x -n $server 'ls /opt/*/*/Apache/Apache/logs/httpd.pid 2>/dev/null|wc -l')
                WAS=$(ssh -f -x -n $server 'ls -d /opt/IBM/WebS*[A-Za-z0-9] 2>/dev/null|wc -l')
                IHS=$(ssh -f -x -n $server 'ps -ef | grep -i HTTPServer | grep root | grep start |grep -v grep 2>/dev/null|wc -l')
                Apache=$(ssh -f -x -n $server 'ls -d /usr/local/apache/bin/apache*[A-Za-z0-9] 2>/dev/null|wc -l')
                JBoss=$(ssh -f -x -n $server 'ps -ef |grep -i org.jboss.Main 2>/dev/null|grep -v grep|wc -l')
                TomCat=$(ssh -f -x -n $server 'ps -ef |grep -i catalina.home 2>/dev/null|grep -v grep|wc -l')
                MySQL=$(ssh -f -x -n $server 'ps -ef |grep -i mysql 2>/dev/null|grep -v grep|wc -l')
                echo -e "$server; \t\t $WLS; \t $OHS; \t $WAS; \t $IHS; \t\t $Apache; \t \t $JBoss; \t \t $TomCat; \t \t $MySQL" >> servers2.csv
        else
                echo "Maschine ist nicht erreichbar"
                echo -e "Das System "$server" ist aktuell nicht erreichbar!" >> nicht-erreichbare-server-log.txt
                set -e

        fi
else
        echo "IP Address is empty"
fi
done < serverip.txt
cat servers2.csv | awk -F';''BEGIN(WLS=0;OHS=0; WAS=0; IHS=0; Apache=0; JBoss=0; TomCat=0; MySQL=0}{WLS+=$2;OHS+=$3;WAS+=$4;IHS+=$5;Apache+=$6;JBoss+=$7;TomCat+=$8;MySQL+=$9}END{printf("Gesamtanzahl; \t \t %d; \t %d; \t %d; \t %d; \t\t %d; \t\t %d; \t \t %d; \t \t %d\n", WLS, OHS, WAS, IHS, Apache, JBoss, TomCat, MySQL)}' >> servers2.csv

echo -e "Dieses Script wurde ausgefuehrt: " DATE=`/bin/date +%d-%m-%y_time_%H-%M-%S` >> servers2.csv
Time() >> servers2.csv

echo -e "FERTIG"

The list of servers were stored in a seperated file where from I get the IP´s. Any suggestions are welcomed

Last edited by methyl; 05-14-2012 at 09:04 AM.. Reason: Change SCRIPT tags to CODE tags
# 2  
Old 05-14-2012
Quote:
But my script is having some probs, while running.
What are the problems?
# 3  
Old 05-14-2012
While running the while loop, something goes wrong, and the workstation hangs up. I don´t know why or exactly where the error is occuring. Separeted, everything is working fine. Maybe something wrong in quotations? but Im not that sure...Smilie

When I run the script, I get a freeze at the following point:

Code:
./ipaddr.sh
PING 10.2.20.114 (10.2.20.114) 56(84) bytes of data.
64 bytes from 10.2.20.114: icmp_seq=1 ttl=64 time=1.34 ms

--- 10.2.20.114 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.347/1.347/1.347/0.000 ms
Machine is giving ping response
Das System 10.2.20.114 ist per Ping erreichbar und wird jetzt abgefragt!
PING 10.253.8.250 56(84) bytes of data.
64 bytes from 10.253.8.250: icmp_seq=1 ttl=53 time=6.63 ms

--- 10.2.20.116 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 6.635/6.635/6.635/0.000 ms
Machine is giving ping response
Das System 10.2.20.116 ist per Ping erreichbar und wird jetzt abgefragt!


After 30 seconds the script halts on the following error:

ssh: connect to host 10.2.20.116 port 22: Connection timed out

But ssh to this host is definitly possible and working from bash. So there must be somewhere an error, that I actually don´t see!!!

Last edited by methyl; 05-14-2012 at 09:47 AM.. Reason: please use code tags
# 4  
Old 05-14-2012
Any one of the commands containing asterisks could expand to a line which is too long for the remote system's shell or produce some invalid syntax. Maybe try a diagnosic echo of each command to see whether one or more of them is failing on that particular remote system.

As a minimum, try placing a diagnostic echo after each ssh command in the master script so you can work out which command is failing on that particular server.

Are all the remote servers running the same Operating System as the master server?

Personally I would not issue one ssh per command. I would write a proper robust script and place it on each remote system.
# 5  
Old 05-14-2012
Thx for modifying my mistake. I haven´t seen the code tag earlier...Sorry for that.
I think I found out one error, but still don´t work as expected. As I put an echo behind every ssh line, and tried to test it, I found out, that it is blocking some ssh connections by my user because I not allowed to jump on every machine. Ok, that was my fault. But now the ping is working fine, and I get a nice reply back from the machines. Also the input into the files were fine. But the script doesn´t jump into the else part, if a ping isn´t possible or a ssh connection isn´t possible. Do I have to change this part? Any suggestions?

And placing the script locally on the machines isn´t that easy, because there were over 1700 machines, most of them virtualized and maintained by our customers. So I ´m having not the root access, I would need for that kind of operations Im planning to do.

And not all machines are running the same OS. Different distrbutions on different machines. This depends on customer needs.

Thx in advance for your help! Sometimes I can´t see the forest standing in front of the trees Smilie
# 6  
Old 05-14-2012
check this
Code:
...
cat servers2.csv | awk -F';''BEGIN(WLS=0;OHS=0; WAS=0; IHS=0; Apache=0; JBoss=0; TomCat=0; MySQL=0}{.......}'

try to change with
Code:
awk -F';' 'BEGIN{....

# 7  
Old 05-15-2012
thx for the help guys, but still not working. I´m running against a wall with this one, however I try to modify Smilie

I think the problem is in the ssh request happening. How could I switch if an error occurs out of the while loop? Do I need to insert another if ... then querry or is another while loop better to get the effect if an error in the connection occurs or during transition of commands to jump out of the first while loop?
A colleague of mine told me to try to simplify the ssh requests and to merge them together. But Im not sure, if this will solve my problems! What do you think about this?

Another error I´m receiving is, if an machine is up and ping'able, but the time to live delivers an error, is it possible to set a filter, to get this machines seperated without awk and sed?
Here is what I mean:

PING 172.16.15.10 (172.16.15.10) 56(84) bytes of data.
From 10.128.16.155: icmp_seq=1 Time to live exceeded

My script runs till this message, and then breaks without an error message. The rest of the ips won´t be considered further. How could I involve this into my script? Any proposals?

Last edited by muogli; 05-15-2012 at 06:27 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

ksh scripting SSH to Compare File Sizes

Hello, I currently have very little experience with Shell scripting and trying to create a script for the purpose of collecting the size of a couple sizes on 4 different Hosts. The Idea is to collected the information from the files in which the script is kicked off on, store the values into... (17 Replies)
Discussion started by: Abstract3000
17 Replies

2. Shell Programming and Scripting

Help needed on ssh in bash scripting

HI I have the following requirement I have a script a.sh which will deploy files in multiple servers .The argument for the a.sh is abc.gz host1.conf where abc.gz is a zip file and one.conf will contain all the database connection string . Now I have to write a b.sh which will... (7 Replies)
Discussion started by: harry00514
7 Replies

3. Shell Programming and Scripting

SSH to remote hosts in shell scripting

Hi There, I have a file contaning some 100 servers names one by one the file called redhat_servers.txt I want to prepare a script where it should give me the host name and kernal version. I wrote like this, #!/bin/bash while read line do ssh $line "uname -nr" done <... (3 Replies)
Discussion started by: kumar85shiv
3 Replies

4. Shell Programming and Scripting

Scripting ssh question

I am new here so I apologize if this question is in the wrong section or outside of the realm of this board. Also, this is just my first week into shell programming so I am probably doing lots of things wrong. I am trying to write a script to ssh to a machine as one user and then run a command... (0 Replies)
Discussion started by: Parva
0 Replies

5. Linux

ssh and passwd scripting execution problems on linux

I'm having a problem here and I was wondering if anyone could help me? I'm putting together a password script. First off, I don't have root access. I have sudo access. Lets say the User ID is Trevor1, the password is H!rry23! and the server name is Linux1234 This is how the script begins ... (5 Replies)
Discussion started by: wdog17
5 Replies

6. Shell Programming and Scripting

SSH and AWK Scripting

I am trying to put an awk command in ssh, for example: ERRCOUNT=`ssh -n $HOST "ps -ef | grep .job | grep -v grep | grep -v alert_jobs_still_running |wc -l"` From korn shell prompt this works: awk '/^Jul 12 16/ {print $0}' /u01/app/oracle/jobs/adhoc/test.dat | wc -l My data file:... (3 Replies)
Discussion started by: bradyd
3 Replies

7. Shell Programming and Scripting

Bash commands to an 'ssh' within an ssh'

I've struggled to find a solution to this problem from searching so I thought I'd write a post to see what can be done. I'm attempting to connect and run commands on 'server2' but because of security limitations I cannot access it directly. I can however ssh into 'server1' and then into... (7 Replies)
Discussion started by: mcintosh.jamie
7 Replies

8. Shell Programming and Scripting

ssh scripting

Hi, I'm trying to write a script that will ssh into a number of boxes and run 'top' and 'ps', then output the results to a file with the hostname. The script only seems to run top or ps on the local machine though. Any help would be apperciated #ssh into box while read box do ssh -n $box ... (3 Replies)
Discussion started by: Brimak86
3 Replies

9. Shell Programming and Scripting

need help scripting tar over ssh

Hello - I've used 'expect' in FTP scripts before without any problems, but am unsure as to how I would script a tar over ssh session? I need to send password for authentication to the remote Suse machine. :confused: Any assistance provided would be GREATLY appreciated. (6 Replies)
Discussion started by: rm -r *
6 Replies

10. Shell Programming and Scripting

scripting an ssh session?

I know the root login/password for a machines, and I want to automate some commands like this from each: ssh root@remoteHost1 "tail /var/log/messages" ssh root@remoteHost2 "tail /var/log/messages" ssh root@remoteHost3 "tail /var/log/messages" ssh root@remoteHost4 "tail /var/log/messages" ssh... (2 Replies)
Discussion started by: jjinno
2 Replies
Login or Register to Ask a Question