Notificar de que alguien se a conectado al sistema mediante ssh

Iniciado por Sergiolocuelo, 20 Agosto 2018, 02:19 AM

0 Miembros y 1 Visitante están viendo este tema.

Sergiolocuelo

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?

engel lex

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ó
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Slava_TZD

#2
Cita de: 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ó

Código (bash) [Seleccionar]
#!/bin/bash

if [ "$EUID" -ne 0 ]
 then echo "run as root"
 exit
fi

LOG="/var/log/sshd_log"
PATTERN="[sshd] Starting session: shell on"

tail -F -n0 ${LOG} |\
while read LINE; do
if echo "${LINE}" | grep -F "${PATTERN}" >/dev/null; then
MSG=$(echo "${LINE}"|cut -d' ' -f10-)
xmessage -center "New session ${MSG}" &
fi
done


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

Suerte


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

animanegra

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.

42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.

Sergiolocuelo

#4
Cita de: Slava_TZD en 20 Agosto 2018, 04:47 AM
Código (bash) [Seleccionar]
#!/bin/bash

if [ "$EUID" -ne 0 ]
 then echo "run as root"
 exit
fi

LOG="/var/log/sshd_log"
PATTERN="[sshd] Starting session: shell on"

tail -F -n0 ${LOG} |\
while read LINE; do
if echo "${LINE}" | grep -F "${PATTERN}" >/dev/null; then
MSG=$(echo "${LINE}"|cut -d' ' -f10-)
xmessage -center "New session ${MSG}" &
fi
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:

#! /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?


Slava_TZD

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


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

Sergiolocuelo

Cita de: 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

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

Slava_TZD

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
# 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


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

Sergiolocuelo

Cita de: 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.
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:

#! /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