usar servidor protocolo ejemplo como comandos cliente linux bash ssh profile

linux - servidor - Realice una acción cuando el usuario inicie sesión a través de SSH desde un host en particular



ssh linux (6)

Tengo una pregunta que me desconcierta y me pregunto si alguien ha intentado lograr lo siguiente:

Supongamos que este es el resultado de mi ''último'' comando en un entorno Linux:

root pts/1 192.168.1.10 Wed Feb 10 07:04 - 07:57 (00:52) root pts/2 Tue Feb 9 22:00 - 00:13 (02:13)

¿Cómo puedo configurar una acción en particular (por ejemplo, un MOTD modificado o enviar un correo electrónico) si el usuario ''root'' ha iniciado sesión desde 192.168.1.10. ¿Hay alguna forma de capturar esta información?

La segunda parte de esta pregunta es cómo puedo hacer que la verificación anterior sea un poco más robusta, es decir, si tengo lo siguiente:

mary pts/1 192.168.1.10 Wed Feb 10 07:04 - 07:57 (00:52) bob pts/2 Tue Feb 9 22:00 - 00:13 (02:13)

Ahora me gustaría realizar una acción si el nombre de usuario es igual a ''mary'' y el host es 192.168.1.10.

Cualquier sugerencia es bienvenida.

Gracias de antemano.


Gracias por todas sus respuestas. Eventualmente logré encontrar una solución que funcione por el momento, pero tiene un defecto que señalaré en un minuto.

He agregado lo siguiente a mi archivo / etc / bashrc (o /etc/bash.bashrc en cualquier entorno que esté usando):

HOST="192.168.0.1" RHOST=`who am i | sed -n ''s/.*(/([^) ]*/).*//1/p; 1q''` if [ "$RHOST" == "$HOST" ]; then echo "SAY WHAT!" #add further actions here if needed fi

El defecto del que estaba hablando en realidad puede no ser un defecto. Si ya tiene SSH-ed en el sistema, y ​​quiere SSH a un host que viva en la misma IP, diga ssh root@your-host , entonces who am i imprimiría ''your-host'' pero creo que ese es el como debería ser

Huelga decir que la sentencia sed anterior se puede modificar para que pueda capturar el nombre de usuario también, y puede ampliar la declaración if/else para satisfacer sus necesidades.

Gracias de nuevo por todas sus respuestas.


Hay un archivo especial /etc/ssh/sshrc donde puedes poner algunos comandos que se ejecutarán cada vez que alguien se conecte por ssh . Lo escribí para ti:

#!/bin/bash [email protected] monitored_user=root monitored_ip=x.x.x.x hostname=$(hostname) # add a welcome message: printf >&2 "/nWelcome on $hostname $USER/n" read -d " " ip <<< $SSH_CONNECTION [[ $ip == $monitored_ip && $USER == $monitored_user ]] || exit 0 date=$(date "+%d.%m.%Y %Hh%M") reverse=$(dig -x $ip +short) mail -s "Connexion of $USER on $hostname" $mail <<EOF IP: $ip Reverse: $reverse Date: $date EOF

Coloque este script en un archivo, luego ponga la ruta completa del script en /etc/ssh/sshrc

En man ssh :

/ etc / ssh / sshrc: los comandos en este archivo son ejecutados por ssh cuando el usuario inicia sesión, justo antes de que se inicie el shell (o comando) del usuario. Consulte la página del manual sshd (8) para obtener más información.


Parece que está utilizando el last porque lee /var/log/wtmp de forma predeterminada, que es un registro de inicios de sesión. El comando who también le permite leer el mismo archivo pero con una interfaz más acorde a sus necesidades.

Por ejemplo:

$ who --ips /var/log/wtmp | grep ''^msw.*127.0.0.1'' msw pts/2 2012-10-07 15:52 127.0.0.1 msw pts/3 2012-10-07 15:55 127.0.0.1

donde ninguna de esas sesiones estaba activa, sino histórico y registrado.


Puede agregar algo a /etc/profile o equivalente que haga algo dependiendo del valor de $SSH_CLIENT .


Una forma sería ejecutar un script simple periódicamente:

#!/bin/bash users=$(last | sed -ne ''/192/.168/.1/.10/ s//([^ ]*/).*//1/p'') for user in $users; do sendmail "$user" < email.txt done

Esto conectaría el último comando en sed para extraer una lista de usuarios y guardarla en la variable $users . El comando sed usa la bandera -n para que solo imprima lo que le decimos. Primero, seleccionamos líneas que contienen la dirección IP especificada, con la /192/.168/.1/.10/ "dirección". En esas líneas, intentamos extraer los caracteres antes de un espacio, y si logramos imprimir el resultado.

Luego, podemos recorrer la variable $users y actuar en consecuencia.

Una forma de llamar esto repetidamente sería a través de cron, y una forma más simple sería hacerlo while true; do ./my_script.bash; sleep 60; done while true; do ./my_script.bash; sleep 60; done while true; do ./my_script.bash; sleep 60; done .


En ubuntu puse un script en

/etc/profile.d

y cuando alguien (usuario ssh) inicia sesión, envía un correo electrónico a mi correo

#/etc/profile.d/run_on_loggin.sh echo $(who i am) | mail -s ''SSH Login Notification'' [email protected]

Quiero crear un archivo php con smtp, para enviar correos electrónicos con mi correo ... algunas veces Hotmail se guarda en spam ...

si tengo el archivo php me ejecutaré así ...

si quiero pasar var al archivo php ejecutar de esta manera ...

disculpe mi inglés: 3

nota: creo que este comando se ejecuta desde el usuario, tenga cuidado si el usuario no tiene permiso para usar algún comando o enviar un correo electrónico.