Script de linux

Mi duda es simple, en clase de informatica estamos dando redes y el profesor nos mando instalar el servidor ssh (no nos deja desintalarlo) para comunicarse entre los ordenadores, pero hay un usuario que puede apagar los ordenadores sin necesidad de contraseña, no se puede desactivar lo del apagado por motivos que el profesor no cuenta, solo nos dijo que no lo desactivaramos y la cuenta pertenece a los invitados del ordenador por lo que no puedo cambiar la contraseña. Ahora el problema he diseñado un script que me avisa cuando se conecta la gente dandome la ultima linea del log "/var/log/auth.log" y me da un mensaje con el comando xmessage, pero mi problema es que desde que me salta el aviso hasta que me da tiempo ha bloquear la conexion tardo un poco y en ese tiempo me apagan el ordenador. Solo quiero saber como seleccionar el texto de la ip de la linea de conexion ( Oct 10 12:04:42 equipo sshd[6318]: Accepted password for usuario from x.x.x.x port 45785 ssh2 ) para ponerla en una variable y poder decidir si aceptar o no la conexion a partir del mensaje de xmessage con los botones.

Simplificando mi duda me refiero a tener una linea obtenida de un comando y conseguir una palabra o conjunto de numeros que sigue un patrón determinado.

Gracias por atender a mi duda
Atentamente
tkotd
Lo suyo sería usar expresiones regulares, pero no sé como van en bash.
Supongo que ayudante de perl será más fácil...
Si pones el script quizás nos sea más fácil.
Hola. Lo que quieres es a partir de ésta línea "Oct 10 12:04:42 equipo sshd[6318]: Accepted password for usuario from x.x.x.x port 45785 ssh2" sacar la ip, que en este caso sería x.x.x.x, ¿no?

Para ello yo usaría el comando cut, éste comando filtra líneas por campos los cuales están separados por el carácter que le indiquemos. En tu caso el carácter es un espacio y el campo es el 11, así que la forma de usar el comando sería cut -d" " -f11. Entre las comillas hay un espacio.

Prueba a poner lo siguiente en una terminal y verás que funciona:
echo "Oct 10 12:04:42 equipo sshd[6318]: Accepted password for usuario from x.x.x.x port 45785 ssh2" | cut -d" " -f11


Espero ayudarte con ésto :)
Gracias Gorthaug me ha servido, pero me puedes explicar como funciona cut porfavor...

En cuanto a elchicosinhada el scrip es simple, es un bucle que comprueba cuando cambia un log gracias a condicionales y variables. La linea mas importante que gracias a Gorthaug ahora ya esta acabada, seria
sudo cat /var/log/auth.log|grep sshd|grep Accepted|tail -n 1|cut -d" " -f11
.

Gracias otra vez y porfavor alguien me puede explicar como funciona el comando cut
Para mirar cómo funciona cualquier comando, "man comando", "man cut" en este caso.
Gracias, pero ya conozco el comando man, pero es que el ingles no es mi fuerte y no consigo entender que hace el comando, solo entiendo ke funciona y no me sirve,...

Gracias de nuevo
Buenas de nuevo, tkotd, hay una forma para poner la mayoría de las hojas man en castellano, si usas Ubuntu los paquetes que tienes que instalar son "manpages-es" y "manpages-es-extra" creo que en cualquier distribución basada en Debian son los mismos paquetes.

Desafortunadamente, la hoja man para el comando cut no está en castellano, pero buscando un poco por google se puede encontrar información en español del comando cut http://rm-rf.es/unix-uso-del-comando-cut/

Y para hacerle la puñeta al profesor y viendo que te interesa el tema de las redes, te propongo una cosa, busca información sobre iptables, en concreto cómo denegar el tráfico a ciertos protocolos de red como ssh :)
[plas] [plas]
Gracias Gorthaug me ha servido de mucho tu información... [oki]

Atentamente tkotd
7 respuestas