scripts/linux/inventario_servicios_ofuscado.sh
2023-07-12 11:43:15 +00:00

607 lines
25 KiB
Bash

#!/bin/bash
# GPL ETD
LOG_PATH="/tmp/inventario_servicios"
LOG_PATH_CSV="$LOG_PATH/csv"
LOG_PATH_TMP="$LOG_PATH/tmp"
LOG="resultadoInventarioServicios.txt"
LOG_RESULTADOS="$LOG_PATH/$LOG"
LISTA_IPs="$LOG_PATH_TMP/listaIPs"
LISTA_IPs_ANSIBLE="$LOG_PATH_TMP/listaIPsAnsible"
LOG_PHP_CSV="$LOG_PATH_CSV/listadoServidoresPhp.csv"
LOG_NGINX_CSV="$LOG_PATH_CSV/listadoServidoresNginx.csv"
LOG_APACHE_CSV="$LOG_PATH_CSV/listadoServidoresApache.csv"
LOG_TOMCAT_CSV="$LOG_PATH_CSV/listadoServidoresTomcat.csv"
LOG_MARIADB_CSV="$LOG_PATH_CSV/listadoServidoresMariaDB.csv"
LOG_POSTGRESQL_CSV="$LOG_PATH_CSV/listadoServidoresPostgreSQL.csv"
LOG_WILDFLY_CSV="$LOG_PATH_CSV/listadoServidoresWildfly.csv"
LOG_DRUPAL_CSV="$LOG_PATH_CSV/listadoServidoresDrupal.csv"
LOG_WORDPRESS_CSV="$LOG_PATH_CSV/listadoServidoresWordpress.csv"
LOGS_MONTAJES_CSV="$LOG_PATH_CSV/listadoServidoresConMontajesCifsNfs.csv"
#LOG_FILE SE DEFINE EN LA FUNCION DE INICIO SIENDO LA UNION DE HOSTNAME E IP DE CADA SERVIDOR DENTRO DEL DIRECTORIO tmp
cd $LOG_PATH || mkdir -p $LOG_PATH 2>&1
mkdir -p $LOG_PATH_TMP 2>&1
mkdir -p $LOG_PATH_CSV 2>&1
mkdir -p $LOG_PATH/antiguos 2>&1
# vaciamos las carpetas tmp y csv de los logs existentes, haciendo antes un backup
NOW=$(date +%Y-%m-%d)
tar -zcvf $LOG_PATH/antiguos/$NOW-tmp.tgz $LOG_PATH_TMP
tar -zcvf $LOG_PATH/antiguos/$NOW-csv.tgz $LOG_PATH_CSV
rm $LOG_PATH_TMP/*.log
rm $LOG_PATH_CSV/*.csv
mv $LOG_RESULTADOS $LOG_PATH/antiguos/$LOG.$NOW
#inicializamos el fichero de log y los CSV
true > $LOG_RESULTADOS
echo "HOSTNAME#IP#Version#php-fpm#Estado#Alternatives#Configuracion#root_path#fastcgi" > $LOG_PHP_CSV
echo "HOSTNAME#IP#Version#Estado#Configuracion#Servicio#root_path" > $LOG_NGINX_CSV
echo "HOSTNAME#IP#Version#Carpeta" > $LOG_APACHE_CSV
echo "HOSTNAME#IP#Version#Carpeta#javaHome#javaVersion#enUso" > $LOG_TOMCAT_CSV
echo "HOSTNAME#IP#Version#Estado" > $LOG_MARIADB_CSV
echo "HOSTNAME#IP#Version#Estado" > $LOG_POSTGRESQL_CSV
echo "HOSTNAME#IP#Servicio#Estado#Version#Path#connectionUrl" > $LOG_WILDFLY_CSV
echo "HOSTNAME#IP#Configuracion#Server#serverRoot#Version_Drupal#Version_Drush" > $LOG_DRUPAL_CSV
echo "HOSTNAME#IP#path" > $LOG_WORDPRESS_CSV
echo "HOSTNAME#IP#Servidor de ficheros#Punto de montaje" > $LOGS_MONTAJES_CSV
echo "HOSTNAME#IP#Tipo#Export#Tamaño#Usado#Disponible#%Uso#Montado en" > $LOGS_MONTAJES_CSV
## LA FUNCION INICIO SE ENCUENTRA AL FINAL, DESPUES DE LAS FUNCIONES
##############################################################################
# FUNCIONES
##############################################################################
generaListaIPs() {
# generamos listado de ips en base a ansible
echo "Buscando IPs CentOS"
ansible centos -m ping > "$LISTA_IPs_ANSIBLE"
echo "Buscando IPs Ubuntu"
ansible ubuntu -m ping >> "$LISTA_IPs_ANSIBLE"
echo "Buscando IPs RedHat"
ansible redhat -m ping >> "$LISTA_IPs_ANSIBLE"
echo "Buscando IPs Oracle"
ansible oracle -m ping >> "$LISTA_IPs_ANSIBLE"
echo "Buscando IPs SuSe"
ansible suse -m ping >> "$LISTA_IPs_ANSIBLE"
# generamos el listado solo con las ips desechando el resto de información que da ansible
echo "Creamos el fichero con IPs"
sudo cat "$LISTA_IPs_ANSIBLE" | grep -oi "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | sort | uniq > "$LISTA_IPs"
}
# Apache (apache2)
compruebaApache2() {
echo "=== APACHE ===" >> "$LOG_FILE"
apache=$(ssh globaluser@"$IP" "dpkg -l | grep apache2 | grep ii | sort | head -1 | awk '{ print \$2 }'")
if [ "$apache" = "apache2" ]; then
apache_version=$(ssh globaluser@"$IP" "/usr/sbin/apache2 -v | grep "\"Server version"\" | awk -F ":" '{ print \$2 }' | sed 's/\ //g'")
apache_carpeta=$(ssh globaluser@"$IP" "/usr/sbin/apache2 -V | grep HTTPD_ROOT | awk '{ print \$2 }' | awk -F "=" '{ print \$2 }' | sed 's/\"//g'")
{
echo " Apache APACHE2"
echo " Version: $apache_version"
echo " Carpeta: $apache_carpeta"
} >> "$LOG_FILE"
echo "$HOSTNAME#$IP#$apache_version#$apache_carpeta" >> "$LOG_APACHE_CSV"
fi
}
# Apache (httpd)
compruebaApache_httpd() {
echo "=== APACHE ===" >> "$LOG_FILE"
apache=$(ssh globaluser@"$IP" "rpm -qa | grep "^httpd-[0-9]" | sort | awk -F"-" '{ print \$1 }'")
if [ "$apache" = "httpd" ]; then
apache_version=$(ssh globaluser@"$IP" "/usr/sbin/httpd -v | grep "\"Server version"\" | awk -F ":" '{ print \$2 }' | sed 's/\ //g'")
apache_carpeta=$(ssh globaluser@"$IP" "/usr/sbin/httpd -V | grep HTTPD_ROOT | awk '{ print \$2 }' | awk -F "=" '{ print \$2 }' | sed 's/\"//g'")
{
echo " Apache HTTPD"
echo " Version: $apache_version"
echo " Carpeta: $apache_carpeta"
} >> "$LOG_FILE"
echo "$HOSTNAME#$IP#$apache_version#$apache_carpeta" >> "$LOG_APACHE_CSV"
fi
}
# Apache Tomcat
compruebaTomcat () {
echo "=== APACHE TOMCAT ===" >> "$LOG_FILE"
# primero buscamos instalaciones estándar y luego instalaciones independientes usando locate
tomcat=$(ssh globaluser@"$IP" "/sbin/tomcat version | head -1 | awk '{ print \$4 }' | awk -F '/' '{ print \$1 }'")
if [ "$tomcat" = "Tomcat" ]; then
tomcatVersion=$(ssh globaluser@"$IP" "/sbin/tomcat version | head -1")
{
echo " Tomcat Distro Release"
echo " Version: $tomcatVersion"
echo " Carpeta: /sbin/tomcat"
} >> "$LOG_FILE"
echo "$HOSTNAME#$IP#$tomcatVersion#'/sbin/tomcat'###" >> "$LOG_TOMCAT_CSV"
fi
tomcat_localizaciones=$(ssh globaluser@"$IP" "/usr/bin/locate version.sh | grep tomcat")
for tomcatVersionFile in $tomcat_localizaciones
do
tomcatVersion=$(ssh globaluser@"$IP" "$tomcatVersionFile | grep "\"Server version"\"")
carpetaTomcat=$(echo "$tomcatVersionFile" | awk -F "/" '{ print "/"$2"/"$3"/"$4 }')
javaHome=$(echo "$tomcatVersionFile" | awk -F "/" '{ print "/"$2"/"$3 }')
javaVersion=$(ssh globaluser@"$IP" "ls -l $javaHome/jdk | awk '{print \$NF}'")
versionTomcat=$(echo "$tomcatVersion" | awk -F ":" '{ print $2 }')
homeTomcat=$(echo "$javaHome" | awk -F "/" '{ print $3 }')
enUso=$(ssh globaluser@"$IP" "grep $homeTomcat /etc/tomcats")
if [ "$enUso" = "$homeTomcat" ]; then
enUso="Si"
else
enUso="No"
fi
{
echo " Tomcat Standalone Release"
echo " Version: $versionTomcat"
echo " Carpeta: $carpetaTomcat"
echo " Java: $javaVersion"
echo "Java home: $javaHome"
echo " En Uso: $enUso"
} >> "$LOG_FILE"
echo "$HOSTNAME#$IP#$versionTomcat#$carpetaTomcat#$javaHome#$javaVersion#$enUso" >> "$LOG_TOMCAT_CSV"
done
}
# NGINX
compruebaNginx() {
echo "=== NGINX ===" >> "$LOG_FILE"
existeNGINX=$(ssh globaluser@"$IP" "systemctl list-units | grep nginx")
if [[ "$existeNGINX" == *"nginx.service"* ]]; then
estadoServicioNginx=$(ssh globaluser@"$IP" "systemctl | grep -w nginx.service | awk '{ print \$2, \$3, \$4 }'")
configuracionesNginx=$(ssh globaluser@"$IP" "ls -la /etc/nginx/conf.d/ | grep -E '\.conf$' | awk '{ print \$9 }'")
confs=$(echo "$configuracionesNginx" | sed 's/ /, /g' | wc -l)
versionNGINX=$(ssh globaluser@"$IP" "/usr/sbin/nginx -v 2>&1 | awk -F ":" '{ print \$2 }' | sed 's/ //'")
{
echo " Version Nginx: $versionNGINX"
echo " Estado del servicio: $estadoServicioNginx"
echo " Configuraciones: $confs"
echo " Datos de las configuraciones encontradas:"
} >> "$LOG_FILE"
# Voy a mirar en todos los .conf de nginx el server name y la ruta de root
configsNginx=$(ssh globaluser@"$IP" "ls /etc/nginx/conf.d/*.conf")
for config in $configsNginx
do
server_name=$(ssh globaluser@"$IP" "grep 'server_name' $config | head -n 1 | awk '{print \$NF}' | sed -e 's/.$//'")
root_path=$(ssh globaluser@"$IP" "grep 'root' $config | grep -v '#root' | head -n 1 | awk '{print \$NF}' | sed -e 's/.$//'")
{
echo " Fichero de configuración: $config"
echo " Server Name: $server_name"
echo " Server Root: $root_path"
} >> "$LOG_FILE"
echo "$HOSTNAME#$IP#$versionNGINX#$estadoServicioNginx#$config#$server_name#$root_path" >> "$LOG_NGINX_CSV"
done
fi
}
# PHP
compruebaPHP() {
echo "=== PHP ===" >> "$LOG_FILE"
existePhp=$(ssh globaluser@"$IP" "systemctl list-units | grep php | grep .service")
if [[ "$existePhp" == *"-fpm.service"* ]]; then
phpfpm=$(ssh globaluser@"$IP" "systemctl list-units | grep php | grep .service | awk '{ print \$1 }'")
versionPhp=$(ssh globaluser@"$IP" "php -v | head -n1")
estadoPhp=$(ssh globaluser@"$IP" "systemctl list-units | grep php | grep .service | awk '{ print \$2, \$3, \$4 }'")
alternativesPhp=$(ssh globaluser@"$IP" "update-alternatives --get-selections | grep 'php ' | awk -F' ' '{ print \$1\" \"\$2\" \"\$3 }'")
{
echo " Version Php: $versionPhp"
echo " Estado $phpfpm: $estadoPhp"
echo " Alternatives: $alternativesPhp"
} >> "$LOG_FILE"
existeNGINX=$(ssh globaluser@"$IP" "systemctl list-units | grep nginx")
if [[ "$existeNGINX" == *"nginx.service"* ]]; then
configs=$(ssh globaluser@"$IP" "ls /etc/nginx/conf.d/*.conf")
echo " configuracion nginx : directorio root : fastcgi_pass" >> "$LOG_FILE"
for config in $configs
do
rootPath=$(ssh globaluser@"$IP" "grep 'root' $config | grep -v '#root' | head -n 1 | awk '{print \$NF}' | sed -e 's/.$//'")
fastcgi=$(ssh globaluser@"$IP" "grep 'fastcgi_pass' $config | grep -v \"#\"")
# con el awk quitamos los espacios en blanco del principio
fastcgiPass=$(echo "$fastcgi" | awk '{sub(/^[ \t]+/, ""); print }')
if [ "$fastcgiPass" != "" ]; then
echo " $config : $rootPath : $fastcgiPass " >> "$LOG_FILE"
echo "$HOSTNAME#$IP#$versionPhp#$phpfpm#$estadoPhp#$alternativesPhp#$config#$rootPath#$fastcgiPass" >> "$LOG_PHP_CSV"
fi
done
else
echo "$HOSTNAME#$IP#$versionPhp#$phpfpm#$estadoPhp#$alternativesPhp###" >> "$LOG_PHP_CSV"
fi
fi
}
# MariaDB o mySQL
compruebaMariaDb_mySQL() {
echo "=== MARIADB o MYSQL ===" >> "$LOG_FILE"
existeMariadb=$(ssh globaluser@"$IP" "systemctl list-units | grep mariadb")
existeMysql=$(ssh globaluser@"$IP" "systemctl list-units | grep mysqld")
if [[ "$existeMariadb" == *"mariadb.service"* ]] || [[ "$existeMysql" == *"mysqld.service"* ]]; then
tipoBBDD=$(ssh globaluser@"$IP" "mysql -V")
else
return
fi
if [[ "$tipoBBDD" == *"MariaDB"* ]]; then
estadoServicioBBDD=$(ssh globaluser@"$IP" "systemctl list-units | grep mariadb.service | awk '{ print \$2, \$3, \$4 }'")
else
estadoServicioBBDD=$(ssh globaluser@"$IP" "systemctl list-units | grep mysqld.service | awk '{ print \$2, \$3, \$4 }'")
fi
{
echo " MariaDB" >> "$LOG_FILE"
echo " Version: $tipoBBDD"
echo " Estado del servicio: $estadoServicioBBDD"
} >> "$LOG_FILE"
echo "$HOSTNAME#$IP#$tipoBBDD#$estadoServicioBBDD" >> "$LOG_MARIADB_CSV"
}
# PostgreSQL
compruebaPostgreSQL() {
echo "=== POSTGRESQL ===" >> "$LOG_FILE"
existePostgresql=$(ssh globaluser@"$IP" "systemctl list-units | grep postgresql")
if [[ "$existePostgresql" == *"postgresql.service"* ]]; then
versionPSQL=$(ssh globaluser@"$IP" "psql -V")
estadoServicioPSQL=$(ssh globaluser@"$IP" "systemctl | grep postgresql.service | awk '{ print \$2, \$3, \$4 }'")
{
echo " Version Postgresql: $versionPSQL"
echo " Estado del servicio: $estadoServicioPSQL"
} >> "$LOG_FILE"
echo "$HOSTNAME#$IP#$versionPSQL#$estadoServicioPSQL" >> "$LOG_POSTGRESQL_CSV"
fi
}
# Fail2ban
compruebaFail2ban() {
echo "=== FAIL2BAN ===" >> "$LOG_FILE"
existeFail2ban=$(ssh globaluser@"$IP" "systemctl list-units | grep fail2ban")
if [[ "$existeFail2ban" == *"fail2ban.service"* ]]; then
versionFail2ban=$(ssh globaluser@"$IP" "fail2ban-client --version")
estadoServicioFail2ban=$(ssh globaluser@"$IP" "systemctl | grep fail2ban.service | awk '{ print \$2, \$3, \$4 }'")
jaulasFail2ban=$(ssh globaluser@"$IP" "sudo fail2ban-client status | grep 'Jail list' | cut -d':' -f2-")
{
echo " Version Fail2ban: $versionFail2ban"
echo " Estado del servicio: $estadoServicioFail2ban"
echo " Jaulas configuradas: $jaulasFail2ban"
} >> "$LOG_FILE"
fi
}
# Wildfly
compruebaWildfly() {
echo "=== WILDFLY ===" >> "$LOG_FILE"
existeWildfly=$(ssh globaluser@"$IP" "systemctl list-units | grep wildfly")
if [[ "$existeWildfly" == *"wildfly"* ]]; then
echo " Wildfly" >> "$LOG_FILE"
cantidadServiciosWildfly=$(ssh globaluser@"$IP" "systemctl list-units | grep wildfly | wc -l")
serviciosWildfly=$(ssh globaluser@"$IP" "systemctl list-units | grep wildfly | awk -F '.' '{ print \$1 }'")
echo " Número de servicios Wildfly activos: $cantidadServiciosWildfly" >> "$LOG_FILE"
for servicio in $serviciosWildfly
do
estadoServicioWildfly=$(ssh globaluser@"$IP" "systemctl | grep $servicio.service | awk '{ print \$2, \$3, \$4 }'")
echo " Estado de $servicio: $estadoServicioWildfly" >> "$LOG_FILE"
versionWildfly=$(ssh globaluser@$IP "sudo grep "WFLYSRV0049" /opt/$servicio/standalone/log/server.* | awk '{ print \$10 \$11 \$12 \$13 \$14 \$15 }' | sort | tail -1")
echo " Version de $servicio: $versionWildfly" >> "$LOG_FILE"
carpetaWildfly=$(ssh globaluser@$IP "sudo /opt/$servicio/bin/standalone.sh --version | grep "JBOSS_HOME" | awk '{ print \$2 }'")
echo " Carpeta de $servicio: $carpetaWildfly" >> "$LOG_FILE"
connectionUrl=$(ssh globaluser@"$IP" "sudo grep '<connection-url>jdbc:oracle:thin:@' /opt/$servicio/standalone/configuration/standalone.xml | awk -F ':' '{ print \$5 }' | awk -F '/' '{print \$2}' | sed -e 's/.$//' | tr '\n' ','")
echo " Connections URL de $servicio: $connectionUrl" >> "$LOG_FILE"
echo "$HOSTNAME#$IP#$servicio#$estadoServicioWildfly#$versionWildfly#$carpetaWildfly#$connectionUrl" >> "$LOG_WILDFLY_CSV"
done
fi
}
# Drupal
compruebaDrupal() {
echo "=== DRUPAL / DRUSH ===" >> "$LOG_FILE"
# Lo primero es ver si existe drupal instalado, si no existe no devolvera nada y nos marcharemos
existeDrupal=$(ssh globaluser@"$IP" "drush status && echo valido || echo error")
if [[ "$existeDrupal" == *"error"* ]]; then
return
fi
echo " Drupal" >> "$LOG_FILE"
# Voy a mirar en todos los .conf de nginx la ruta root y ejecutar 'drush status' para ver si tiene drupal y sacar la info
confsNginx=$(ssh globaluser@"$IP" "ls /etc/nginx/conf.d/*.conf")
for conf in $confsNginx
do
serverName=$(ssh globaluser@"$IP" "grep 'server_name' $conf | head -n 1 | awk '{print \$NF}' | sed -e 's/.$//'")
serverRoot=$(ssh globaluser@"$IP" "grep 'root' $conf | head -n 1 | awk '{print \$NF}' | sed -e 's/.$//'")
infoDrupal=$(ssh globaluser@"$IP" "sudo su -c 'cd $serverRoot; drush status'")
versionDrupal=$(echo "$infoDrupal" | grep 'Drupal version' | awk -F ':' '{print $2}')
versionDrush=$(echo "$infoDrupal" | grep 'Drush version' | awk -F ':' '{print $2}')
{
echo " Configuración nginx: $conf"
echo " Server Name: $serverName"
echo " Server Root: $serverRoot"
echo " Version Drupal: $versionDrupal"
echo " Version Drush: $versionDrush"
} >> "$LOG_FILE"
echo "$HOSTNAME#$IP#$conf#$serverName#$serverRoot#$versionDrupal#$versionDrush" >> "$LOG_DRUPAL_CSV"
done
}
# Wordpress
compruebaWordpress() {
echo "=== WORDPRESS ===" >> "$LOG_FILE"
existeWordpress=$(ssh globaluser@"$IP" "sudo find /usr/share/nginx -maxdepth 6 -name wp-admin")
if [[ "$existeWordpress" == "" ]]; then
return
fi
echo " Wordpress" >> "$LOG_FILE"
pathWp=$(echo "$existeWordpress" | awk '{print $1}')
echo " Path: $pathWp" >> "$LOG_FILE"
for path in $pathWp
do
echo "$HOSTNAME#$IP#$path" >> "$LOG_WORDPRESS_CSV"
done
}
# Puntos de montaje CIFS / NFS
compruebaMontajesNfsCifs() {
echo "=== CIFS/NFS ===" >> "$LOG_FILE"
cifs_fs=$(ssh globaluser@"$IP" "sudo df -t cifs -h")
nfs_fs=$(ssh globaluser@"$IP" "sudo df -t nfs -h")
nfs4_fs=$(ssh globaluser@"$IP" "sudo df -t nfs4 -h")
cifs=$(echo "$cifs_fs" | tail -n +2 | awk -F " " '{ print $1"#"$2"#"$3"#"$4"#"$5"#"$6 }')
nfs=$(echo "$nfs_fs" | tail -n +2 | awk -F " " '{ print $1"#"$2"#"$3"#"$4"#"$5"#"$6 }')
nfs4=$(echo "$nfs4_fs" | tail -n +2 | awk -F " " '{ print $1"#"$2"#"$3"#"$4"#"$5"#"$6 }')
if [[ "$cifs" != "" || "$nfs" != "" || "$nfs4" != "" ]]; then
{
echo " cifs/nfs"
echo "$cifs_fs"
echo "$nfs_fs"
echo "$nfs4_fs"
} >> "$LOG_FILE"
fi
if [[ "$cifs" != "" ]]; then
for fs in $cifs
do
echo "$HOSTNAME $IP cif $fs" | awk '{ print $1"#"$2"#"$3"#"$4 }' >> "$LOGS_MONTAJES_CSV"
done
fi
if [[ "$nfs" != "" ]]; then
#nfsVersion=$(ssh globaluser@"$IP" "nfsstat -c | grep 'Client nfs' | awk -F ":" '{ print \$1 }' | awk '{ print \$3 }' | paste -s -d_") # el paste es por si hay varias versiones en varias lineas las concatene
for fs in $nfs
do
echo "$HOSTNAME $IP nfs_v3 $fs" | awk '{ print $1"#"$2"#"$3"#"$4 }' >> "$LOGS_MONTAJES_CSV"
done
fi
if [[ "$nfs4" != "" ]]; then
for fs in $nfs4
do
echo "$HOSTNAME $IP nfs_v4 $fs" | awk '{ print $1"#"$2"#"$3"#"$4 }' >> "$LOGS_MONTAJES_CSV"
done
fi
}
compruebaServicios() {
# Apache se comprueba de forma independiente ya que en unos es apache2 y en otros es httpd
if [[ "$queEscaneo" = "2" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Apache Tomcat..."
compruebaTomcat
fi
if [[ "$queEscaneo" = "3" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Nginx..."
compruebaNginx
fi
if [[ "$queEscaneo" = "4" || "$queEscaneo" = "0" ]]; then
echo "Comprobando PHP..."
compruebaPHP
fi
if [[ "$queEscaneo" = "5" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Mariadb y/o Mysql..."
compruebaMariaDb_mySQL
fi
if [[ "$queEscaneo" = "6" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Postgresql..."
compruebaPostgreSQL
fi
if [[ "$queEscaneo" = "7" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Wildfly..."
compruebaWildfly
fi
if [[ "$queEscaneo" = "8" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Drupal / Drush..."
compruebaDrupal
fi
if [[ "$queEscaneo" = "9" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Wordpress..."
compruebaWordpress
fi
if [[ "$queEscaneo" = "A" || "$queEscaneo" = "a" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Fail2ban..."
compruebaFail2ban
fi
if [[ "$queEscaneo" = "B" || "$queEscaneo" = "b" || "$queEscaneo" = "0" ]]; then
echo "Comprobando puntos de montaje cifs/nfs..."
compruebaMontajesNfsCifs
fi
}
infoUbuntu() {
if [[ "$queEscaneo" = "1" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Apache2..."
compruebaApache2
fi
compruebaServicios
}
infoCentOS() {
if [[ "$queEscaneo" = "1" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Apache httpd..."
compruebaApache_httpd
fi
compruebaServicios
}
infoRedHat() {
if [[ "$queEscaneo" = "1" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Apache httpd..."
compruebaApache_httpd
fi
compruebaServicios
}
infoOracle() {
if [[ "$queEscaneo" = "1" || "$queEscaneo" = "0" ]]; then
echo "Comprobando Apache httpd..."
compruebaApache_httpd
fi
compruebaServicios
}
infoSuse() {
true
}
compruebaSSH() {
retorno_ssh=$(ssh -o BatchMode=yes -o ConnectTimeout=5 globaluser@"$IP" "cat /etc/lsb-release 2>&1;cat /etc/oracle-release 2>&1;cat /etc/centos-release 2>&1;cat /etc/redhat-release 2>&1;cat /etc/issue 2>&1")
return $?
}
sacaVersiones() {
# Ahora sacamos las versiones de los sistemas operativos y dependiendo de que sea sacamos el resto de información
case $retorno_ssh in
*"Ubuntu "*)
RELEASE=$(echo "$retorno_ssh" | grep -oi "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | uniq)
# el if -z comprueba si la variable está vacia
if [ -z "$RELEASE" ]; then
RELEASE=$(echo "$retorno_ssh" | grep -oi "[0-9]\{1,3\}\.[0-9]\{1,3\}" | uniq)
fi
SERVER="Ubuntu $RELEASE"
echo "Sistema Operativo: $SERVER"
echo "SISTEMA OPERATIVO: $SERVER" >> "$LOG_FILE"
infoUbuntu
;;
*"CentOS "*)
RELEASE=$(echo "$retorno_ssh" | grep -oi "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | uniq)
if [ -z "$RELEASE" ]; then
RELEASE=$(echo "$retorno_ssh" | grep -oi "[0-9]\{1,3\}\.[0-9]\{1,3\}" | uniq)
fi
SERVER="CentOS $RELEASE"
echo "Sistema Operativo: $SERVER"
echo "SISTEMA OPERATIVO: $SERVER" >> "$LOG_FILE"
infoCentOS
;;
*"Red Hat "*)
RELEASE=$(echo "$retorno_ssh" | grep -oi "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | uniq)
if [ -z "$RELEASE" ]; then
RELEASE=$(echo "$retorno_ssh" | grep -oi "[0-9]\{1,3\}\.[0-9]\{1,3\}" | uniq)
fi
SERVER="Red Hat $RELEASE"
echo "Sistema Operativo: $SERVER"
echo "SISTEMA OPERATIVO: $SERVER" >> "$LOG_FILE"
infoRedHat
;;
*"Oracle "*)
SERVER="Oracle"
echo "Sistema Operativo: $SERVER"
echo "SISTEMA OPERATIVO: $SERVER" >> "$LOG_FILE"
infoOracle
;;
*"SUSE "*)
RELEASE=$(ssh globaluser@"$IP" "cat /etc/SuSE-release | grep SUSE")
SERVER="Suse $RELEASE"
echo "Sistema Operativo: $SERVER"
echo "SISTEMA OPERATIVO: $SERVER" >> "$LOG_FILE"
infoSuse
;;
*)
SERVER="DESCONOCIDO"
echo "Sistema Operativo: $SERVER"
echo "SISTEMA OPERATIVO: $SERVER" >> "$LOG_FILE"
;;
esac
}
inicio() {
# Iniciamos el recorrido por los servers en búsqueda de los diferentes servicios
for IP in $(cat "$LISTA_IPs")
do
#HOSTNAME=$(dig -x "$IP" | grep -a1 "ANSWER SECTION:" | grep "PTR" | awk '{print $NF}')
HOSTNAME=$(ssh "$IP" "hostname -f")
echo -e "\nComprobando conexión SSH con $HOSTNAME ($IP)"
if compruebaSSH
then
LOG_FILE="$LOG_PATH_TMP/$HOSTNAME-$IP.log"
{
echo "************************************"
echo " Conexión establecida..."
echo " Servidor: $HOSTNAME ($IP)"
echo "************************************"
} > "$LOG_FILE"
sacaVersiones
cat "$LOG_FILE" >> "$LOG_RESULTADOS"
else
echo "Conexión ERRONEA."
echo "NO hay conexión con $HOSTNAME ($IP)" >> $LOG_PATH_TMP"/conexion_ssh_fallida.err"
fi
done
}
####################################################################################################
# MODULO MAIN
####################################################################################################
clear
echo ""
echo "Inventario de servicios"
echo ""
if [[ $1 = "ALL" || $1 = "TODOS" || $1 = "all" || $1 = "todos" || $1 = "0" ]]; then
queEscaneo="0"
generaListaIPs
inicio
else
echo "¿Deseas generar la lista de IPs de nuevo? (SI/NO)"
read -r respuesta
if [[ "$respuesta" = "SI" || "$respuesta" = "si" || "$respuesta" = "Si" || "$respuesta" = "S" || "$respuesta" = "s" ]]; then
generaListaIPs
fi
echo ""
echo "Selecciona un servicio específico o todos"
echo "-------------------------------------------"
echo "1) Apache"
echo "2) Apache Tomcat"
echo "3) Nginx"
echo "4) Php"
echo "5) mariaDB/ mySQL"
echo "6) postgreSQL"
echo "7) Wildfly"
echo "8) Drupal"
echo "9) Wordpress"
echo "A) Fail2ban"
echo "B) Puntos de montaje CIFS/NFS"
echo ""
echo "0) TODOS LOS SERVICIOS"
echo "X) SALIR - EXIT"
echo ""
echo "¿Que opción quieres?"
read -r queEscaneo
case ${queEscaneo} in
1|2|3|4|5|6|7|8|9|0|A|a|B|b)
inicio
;;
X|x)
exit
;;
*)
echo ""
echo "OPCION INVALIDA, VUELVE A INTENTARLO"
echo""
;;
esac
fi