Skip to content

A simple Linux shell script to probe one or more remote severs - Only SSH and BASH.

License

Notifications You must be signed in to change notification settings

AbbyEeninkwinkel/host_probe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Enjoy this easy tunable idea.
It's a simple remote fact collector, a probe.
No stress due to it's relative simplicity and endless tuning possibilities.
The probe doesn't write anything to the disks of your hosts, requires only a minimal level of authorization required for your probes and it cleany show up in the log files.

Instruction.

Clone this repo or put the code below in a file named host_probe.sh and make sure to run

chmod u+x host_probe.sh

Create a file (or edit) hosts.txt with your targets of investigation.
Should look like:

Mycoolserver1.test.com
Mycoolserver2.test.com

Make sure you can ssh into your hosts using the names in hosts.txt, preferably with a key.

With this set up the code should work out of the box.
See the inline examples to tune your probe.
Watch out for \ and '" pitfall.
A small warning should be mentioned: security was not my focus when writing this article.

Happy probing!

#!/bin/bash
# Name: Host_probe
# What it does: Host_probe is a relative simple script to collect host data for any purpose 
# Written by: Abby Eeninkwinkel
# Version 2.4 Juni 2023 2.4 (release for community)
# Todo: needs to collect possible error values from remote
# Ideas: lots :)

OLD_IFS="$IFS"
version="2.4"

# define your hosts here
# host rules.
# - name should resolve 
# - you should have ssh access with a key
# specify them inline
#    hosts=(server1, server2)
# or alternatively read them from a file as for now the default
hosts=$(cat hosts.txt)

# initialize variables
probe=""
probe_key=""
probe_value_action=""

add_to_probe () 
  {
   probe=$probe"printf '$probe_key '; $probe_value_action; printf '\n';"
  }

# construct your probe
# probe rules:
# - a probe line consist of pair of key name and return value(s)
# - both key value and return value may not contain any spaces

# Example 1: adding a probe timestamp when run on the remote host
probe_key="date"
probe_value_action="date +'%Y-%m-%dT%H:%M:%S,%3N'"
add_to_probe

# Example 2: probe a remote environment variable. 
# You must have "PermitUserEnvironment yes" in your remote ssh config file. Security issue!
# notice the escape \
probe_key="remote_pwd"
probe_value_action="printf \$PWD"
add_to_probe

# Example 3: probe the hostname\ip as found on the host.
probe_key="remote_host_name"
probe_value_action="cat /etc/hostname"
add_to_probe

# Example 4: get the size of a remote directory
# notice a return value should not have spaces 
# awk should be available on the remote system
probe_key="size_of_my_remote_home"
probe_value_action="du -hs | awk '{print \$1}'"
add_to_probe

# Example 5: get the size of multiple remote directories
for item in /disk1 /disk2 /disk3; do
   probe_key="size_of_$item"
   probe_value_action="du -hs $item | awk '{print \$1}'"   
   add_to_probe 
 done

echo "This how your probe looks like:"
echo $probe
echo " " 

# Probing and working with the probed data
IFS=$'\n'
for host_nm in ${hosts[@]}; do
    printf "======= Running Probe for host $host_nm =======\n"   
    result=$(ssh $host_nm "$probe")
    echo Result for host nost_nm
    for element in ${result[@]};  do
      str="${element}"
      # print each return line    
      printf $str
      # test/search for a field
      # notice that we use cut because of the current IFS 
      if [[ "$str" == "date "* ]]; then
         printf "  <= Found a date field!"
         value=$(echo "${str}" | cut -d ' ' -f2)
         printf " with value: %s" "$value"
      fi
      printf "\n"
    done
done

IFS="$OLD_IFS"   
echo "Ready"
exit

Abby Eeninkwinkel 2023

About

A simple Linux shell script to probe one or more remote severs - Only SSH and BASH.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages