Foro de elhacker.net

Sistemas Operativos => GNU/Linux => Mensaje iniciado por: Sergiolocuelo en 20 Agosto 2018, 02:19 am



Título: Notificar de que alguien se a conectado al sistema mediante ssh
Publicado por: Sergiolocuelo en 20 Agosto 2018, 02:19 am
Hola, me gustaría hacer un script que me avise cuando alguien se conecte a mi sistema mediante ssh, la cuestión es ¿como puedo hacerlo? ¿Haría falta hacer un script con un bucle?


Título: Re: Notificar de que alguien se a conectado al sistema mediante ssh
Publicado por: engel lex en 20 Agosto 2018, 04:11 am
si, un bucle

la forma facil de hacerlo y como muchos programas implementan sistemas, es leer el log de ssh, si hay nuevas lineas, entonces algo pasó, solo tienes que leer la linea y dice que pasó y cual ip lo causó


Título: Re: Notificar de que alguien se a conectado al sistema mediante ssh
Publicado por: Slava_TZD en 20 Agosto 2018, 04:47 am
si, un bucle

la forma facil de hacerlo y como muchos programas implementan sistemas, es leer el log de ssh, si hay nuevas lineas, entonces algo pasó, solo tienes que leer la linea y dice que pasó y cual ip lo causó

Código
  1. #!/bin/bash
  2.  
  3. if [ "$EUID" -ne 0 ]
  4.  then echo "run as root"
  5.  exit
  6. fi
  7.  
  8. LOG="/var/log/sshd_log"
  9. PATTERN="[sshd] Starting session: shell on"
  10.  
  11. tail -F -n0 ${LOG} |\
  12. while read LINE; do
  13. if echo "${LINE}" | grep -F "${PATTERN}" >/dev/null; then
  14. MSG=$(echo "${LINE}"|cut -d' ' -f10-)
  15. xmessage -center "New session ${MSG}" &
  16. fi
  17. done

xmessage es solo de ejemplo, si quieres una notificación necesitas alguna pijada estilo libnotify+zenity.

Suerte


Título: Re: Notificar de que alguien se a conectado al sistema mediante ssh
Publicado por: animanegra en 20 Agosto 2018, 10:41 am
Tambien podrías poner en el bashrc una linea que mande el mensaje. Creo recordar que la variable display muestra ":0" si estas en local asi que cuando no valga eso mandas un mensaje (Tengo mala memoria así que igual no es esa variable la que indica desde donde conectas, haciendo env es facil de ver cual es). De esta manera no tienes que estar todo el rato mirando el archivo de log de ssh.

Yo hice en su dia un programa que hacía un wget a un servidor con un php muy básico (metia el nombre del ordenador, usuario y hora de login) y tenia un cliente en movil que se conectaba para decirme cuando hacia login alguien en alguno de mis equipos. Tambien se podía hacer algo parecido con el autorun del windows y en mac. De esta manera sabías a que hora esta entrando alguien y si eres tu.

Saludos.


Título: Re: Notificar de que alguien se a conectado al sistema mediante ssh
Publicado por: Sergiolocuelo en 20 Agosto 2018, 19:23 pm
Código
  1. #!/bin/bash
  2.  
  3. if [ "$EUID" -ne 0 ]
  4.  then echo "run as root"
  5.  exit
  6. fi
  7.  
  8. LOG="/var/log/sshd_log"
  9. PATTERN="[sshd] Starting session: shell on"
  10.  
  11. tail -F -n0 ${LOG} |\
  12. while read LINE; do
  13. if echo "${LINE}" | grep -F "${PATTERN}" >/dev/null; then
  14. MSG=$(echo "${LINE}"|cut -d' ' -f10-)
  15. xmessage -center "New session ${MSG}" &
  16. fi
  17. done

xmessage es solo de ejemplo, si quieres una notificación necesitas alguna pijada estilo libnotify+zenity.

Suerte

No comprendo muy bien tu código ya que sé lo básico de shell script, este es mi código:

Código:
#! /bin/bash
conectados=`w|wc -l`

for conex in $conectados; do
if [ $conex -gt 3 ]; then
zenity --info --text "Alguien se a conectado"
fi
done

Como veréis lo e hecho de manera sencilla, el problema es que solo me avisa de que hay alugien conectado solo cuando abro la terminal, ¿Tengo mal el bucle for?



Título: Re: Notificar de que alguien se a conectado al sistema mediante ssh
Publicado por: Slava_TZD en 20 Agosto 2018, 20:58 pm
w no te muestra exactamente si a se han conectado por SSH. La forma de hacerlo es como comentó el otro compañero y te muestro en el script. No tiene misterio, hace un tail al log y cada línea es evaluada en busca de una pattern que indique que una nueva sesión se abrió.

Si quieres hacer funcionar tu script tienes que meter todo eso dentro de un bucle.

Suerte


Título: Re: Notificar de que alguien se a conectado al sistema mediante ssh
Publicado por: Sergiolocuelo en 20 Agosto 2018, 21:14 pm
w no te muestra exactamente si a se han conectado por SSH. La forma de hacerlo es como comentó el otro compañero y te muestro en el script. No tiene misterio, hace un tail al log y cada línea es evaluada en busca de una pattern que indique que una nueva sesión se abrió.

Si quieres hacer funcionar tu script tienes que meter todo eso dentro de un bucle.

Suerte

El script que pasó no me funciona, no tengo el archivo sshd_log


Título: Re: Notificar de que alguien se a conectado al sistema mediante ssh
Publicado por: Slava_TZD en 20 Agosto 2018, 22:08 pm
Era un path de ejemplo, el fichero no es el mismo ni tiene porque estar en el mismo lugar dependiendo del logger que tengas y de como esté configurado... Si te conectas por SSH y luego haces un grep -r "shell on" en /var/log te dirá donde está logueando.

Ejemplo
Código:
# cd /var/log
# grep -r "shell on"
sshd/current:Aug 20 00:00:01 [sshd] Starting session: shell on pts/12 for root from 10.0.55.154 port 37238 id 0

Puede que la pattern no te coincida...eg te sale el pid del servidor en log 'sshd[8321]' o tiene un formato distinto, simplemente te fijas en el mensaje que se genera al loguearte y creas otra.

Suerte


Título: Re: Notificar de que alguien se a conectado al sistema mediante ssh
Publicado por: Sergiolocuelo en 20 Agosto 2018, 22:14 pm
Era un path de ejemplo, el fichero no es el mismo ni tiene porque estar en el mismo lugar dependiendo del logger que tengas y de como esté configurado... Si te conectas por SSH y luego haces un grep -r "shell on" en /var/log te dirá donde está logueando.
Puede que la pattern no te coincida...eg te sale el pid del servidor en log 'sshd[8321]' o tiene un formato distinto, simplemente te fijas en el mensaje que se genera al loguearte y creas otra.

Suerte

Gracias por la información!! Al final como no sabía como hacer el bucle en linux, le e hecho con python:

Código:
#! /usr/bin/python3

import subprocess
def bucle():


a=subprocess.check_output("who|wc -l", shell=True)

if a[0]>2:

subprocess.run("zenity --info --text 'Alguien se a conectado'", shell=True)
subprocess.run("espeak -ves 'Alguien se a conectado al sistema'", shell=True)



while True:
bucle()
subprocess.run("sleep 30", shell=True)

¿El bucle que e hecho con python se hace igual que en Linux o es de otra forma diferente? Si me lo demostrases te estaría muy agradecido  ;)

También voy a intentar a hacerlo como me indicáis