Skip to content

Instantly share code, notes, and snippets.

@enekoamieva
Created September 2, 2018 07:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save enekoamieva/390764e1cc53f9e660f1f9b173ca4d16 to your computer and use it in GitHub Desktop.
Save enekoamieva/390764e1cc53f9e660f1f9b173ca4d16 to your computer and use it in GitHub Desktop.
Script para automatizar tareas SSH
#!/bin/bash
### Configuración OpenSSH ###
usuario=`whoami`
if [ "$usuario" != root ]
then
clear
echo "No tienes permisos para acceder al sistema"
echo "Se saldra del programa en 5 segundos"
sleep 5
exit
else
test -e /etc/init.d/ssh
if [ $? -ne 0 ]
then
clear
echo "No tienes funcionando el servicio SSH. Lo necesitas para poder cambiar la configuracion."
echo "Se saldra del programa en 5 segundos"
sleep 5
exit
fi
fi
opcion=1
while [ $opcion -ne 0 ]
do
clear
echo "####################################################"
echo "# OPCIONES OPEN-SSH #"
echo "# #"
echo "# (1) Permitir/No permitir conexión a usuario ROOT #"
echo "# (2) Crear registro de intentos fallidos por SSH #"
echo "# (3) Denegar acceso por SSH a usuarios del sistema#"
echo "# (4) Realizar conexión SSH a equipo remoto #"
echo "# (5) Crear llave pública para equipo remoto #"
echo "# (0) Salir del programa #"
echo "# #"
echo "####################################################"
echo ""
read -p "Elige el nº correspondiente con la opción deseada -> " opcion
case $opcion in
### Permitir/No permitir conexión a usuario ROOT ###
1)
clear
read -p "¿Deseas permitir que el usuario ROOT se conecte por SSH? Por defecto está deshabilitado. s / n " opcion_root
case $opcion_root in
s|S)
sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config
sleep 1
echo "A root se le permitirá la conexión vía SSH"
sleep 3;;
n|N)
sed -i 's/PermitRootLogin without-password/PermitRootLogin no/g' /etc/ssh/sshd_config
sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
sleep 1
echo "A root NO se le permitirá la conexión vía SSH"
sleep 3;;
*)
echo "Has introducida una opción no válida"
sleep 3;;
esac ;;
# Fin de case 1
### Crear registro de intentos fallidos por SSH ###
2)
clear
echo "Se creará un fichero registrando los últimos intentos fallidos de acceso al sistema"
sleep 1
mkdir /root/.ssh_fallidos 2> /dev/null
fecha=`date +%Y%m%d`
cat /var/log/auth* | grep Failed | tail -n 50 >> /root/.ssh_fallidos/$fecha.log
if [ $? -eq 0 ]
then
echo "Registro creado correctamente en /root/.ssh_fallidos/"
sleep 5
else
echo "Ha habido un error al crearlo"
sleep 3
fi;;
# Fin de case 2
### Denegar acceso por SSH a usuarios del sistema ###
3)
clear
echo "Estos son los usuarios que hay creados en el sistema"
sleep 2
usuarios=`grep -w [1-9][0-9][0-9][0-9] /etc/passwd`
for nombre_usuario in $usuarios
do
nombre=`echo $nombre_usuario | cut -f 1 -d ":"`
echo $nombre
done
echo ""
read -p "Introduce los nombres que quieras de los mostrados, para prohibir el acceso vía SSH --> " users
sleep 2
while [ -z "$users" ]
do
read -p "Tienes que introducir correctamente los usuarios --> " users
done
echo "DenyUsers $users" >> /etc/ssh/sshd_config
if [ $? -ne 0 ]
then
echo "Ha habido un error, vuelvelo a intentar"
sleep 4
else
echo "Se han introducido correctamente los usuarios a los que se va a denegar el acceso vía SSH al equipo"
sleep 3
fi;;
# Fin de case 3
### Realizar conexión SSH a equipo remoto ###
4)
read -p "Introduce el usuario, la direccion, y el puerto (por defecto es 22) -> " user direccion puerto
while [ -z "$user" -o -z "$direccion" ]
do
clear
echo "No has introducido correctamente todos los datos"
read -p "Vuelve a introducir el usuario, la direccion, y el puerto (por defecto es 22) -> " user direccion puerto
done
if [ -z $puerto ]
then
puerto=22
fi
ssh $user@$direccion -p $puerto 2> /dev/null
if [ $? -ne 0 ]
then
echo "Ha habido un problema con la conexión. Revisa si los datos están introducidos correctamente"
sleep 3
else
echo "La conexión ha finalizado correctamente"
sleep 3
fi;;
# Fin de case 4
### Crear llave pública para equipo remoto ###
5)
echo "Se va a crear una clave pública para tu conexión SSH remota"
sleep 2
echo "En los siguientes pasos que aparecerán por pantalla simplemente tienes que pulsar el botón INTRO para aceptar"
sleep 3
clear
ssh-keygen -b 4096 -t rsa
read -p " Ahora introduce el usuario, la dirección y el puerto (por defecto es 22) del equipo remoto que quieres que guarde tu clave pública de SSH -> " user direccion puerto
while [ -z "$user" -o -z "$direccion" ]
do
echo "No has introducido correctamente todos los datos"
read -p "Vuelve a introducir el usuario, la direccion y el puerto (por defecto es 22)-> " user direccion puerto
done
if [ -z $puerto ]
then
puerto=22
fi
echo "Ahora se procederá a crear la llave publica en el equipo remoto. Te pedirá tu contraseña de usuario SSH. Pulsa INTRO para continuar"
sleep 3
ssh-copy-id $user@$direccion -p $puerto 2> /dev/null
if [ $? -ne 0 ]
then
echo "Ha habido un problema con la creación de la clave pública. Revisa si los datos están introducidos correctamente"
sleep 5
else
echo "Se ha realizado correctamente la creación de la llave pública para $user en el equipo $direccion"
sleep 5
fi;; #Fin de case 5
esac #Fin del menu de opciones
done #Fin del bucle while
echo "Gracias por usar este script"
sleep 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment