Tengo una secuencia de comandos que debe ejecutar una persona que inicie sesión en el servidor con SSH .
¿Hay alguna manera de averiguar automáticamente desde qué dirección IP se conecta el usuario?
Por supuesto, podría preguntarle al usuario (es una herramienta para programadores, así que no hay problema con eso), pero sería mejor si me enterara.
linux
networking
ssh
ip-address
flybywire
fuente
fuente
Respuestas:
Compruebe si hay una variable de entorno llamada:
O
(o cualquier otra variable de entorno) que se establece cuando el usuario inicia sesión. Luego, procese usando el script de inicio de sesión del usuario.
Extraer la IP:
fuente
${SSH_CLIENT%% *}
sudo -E
Podrías usar el comando:
eso te dará algo como esto:
fuente
pinky --help
:A lightweight 'finger' program; print user information. The utmp file will be /var/run/utmp.
Pruebe lo siguiente para obtener solo la dirección IP:
fuente
who am i
! =whoami
en mi Linux al menos. Hay una quinta cosa, y es el nombre de host del cliente.who am i
: La página del manual dewho
dice:If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.
. Entonces, realmente, cualquier cosa con dos palabras funciona, también cosas comowho likes icecream
.who -m --ips|awk '{print $5}'
que solo tuviera IP y ninguna respuesta de respuesta inversa. Gracias por la ayudawho am i
!who am i|awk '{ print $5}'
(tmux(2445).%3)
Simplemente escriba el siguiente comando en su máquina Linux:
fuente
fuente
Lo uso para determinar mi variable DISPLAY para la sesión cuando inicio sesión a través de ssh y necesito mostrar X remota.
fuente
who am i | awk '{print $6}' | sed 's/[()]//g' | sed 's/\./\\./g'
la última parte escapa a los puntos.Mejora en una respuesta previa. Da la dirección IP en lugar del nombre de host. --ips no disponibles en OS X.
más universal, cambie $ 5 a $ 6 para OS X 10.11:
fuente
fuente
(No info could be read for "-p": geteuid()=507 but you should be root.)
sudo ss -tapen | grep ssh | awk '{ print $4}'|grep -v ':22$'
funciona?Puede obtenerlo de manera programática a través de una biblioteca SSH ( https://code.google.com/p/sshxcute )
fuente
netstat funcionará (en la parte superior algo como esto) tcp 0 0 10.x.xx.xx: ssh someipaddress.or.domainame: 9379 ESTABLECIDO
fuente
Salida:
dos # en mi experimento
da la dirección IP
Salida:
Pero los resultados se mezclan con otros usuarios y otras cosas. Necesita más trabajo.
fuente
un hilo antiguo con muchas respuestas, pero ninguna es exactamente lo que estaba buscando, así que estoy aportando la mía
Este método es compatible con ssh directo, usuarios sudo y sesiones de pantalla. rastreará a través del árbol de procesos hasta que encuentre un pid con la variable SSH_CLIENT, luego registrará su IP como $ sshClientIP. Si llega demasiado lejos en el árbol, registrará la IP como 'localhost' y dejará el bucle.
fuente
Por lo general, hay una entrada de registro en / var / log / messages (o similar, dependiendo de su sistema operativo) que puede utilizar con el nombre de usuario.
fuente
Linux: ¿quién soy yo | awk '{print $ 5}' | sed 's / [()] // g'
AIX: quien soy yo | awk '{print $ 6}' | sed 's / [()] // g'
fuente
Busque conexiones SSH para la cuenta "myusername";
Tome la cadena del primer resultado;
Toma la quinta columna;
Dividir por ":" y devolver la primera parte (el número de puerto no es necesario, solo queremos IP):
netstat -tapen | grep "sshd: myusername" | cabeza -n1 | awk '{split ($ 5, a, ":"); imprime un [1]} '
De otra manera:
quien soy yo | awk '{l = longitud ($ 5) - 2; print substr ($ 5, 2, l)} '
fuente
sudo ss -tapen | grep "sshd: $(whoami)"|head -n1|awk '{split($5, a, ":"); print a[1]}'
dice que mi cliente ssh es de2a02
y su "Otra forma:" dicetmux(2445).%3
Suponiendo que abre una sesión interactiva (es decir, asigna un pseudo terminal ) y tiene acceso a stdin, puede llamar a un ioctl en ese dispositivo para obtener el número de dispositivo (/ dev / pts / 4711) e intentar encontrarlo en / var / run / utmp (donde también habrá el nombre de usuario y la dirección IP desde donde se originó la conexión).
fuente
Un pulgar hacia arriba por la respuesta de @Nikhil Katre:
El que usa
who
opinky
hizo lo que básicamente se le pide. Pero Pero Pero no dan información de sesiones históricas.Lo que también puede ser interesante si desea conocer a alguien que acaba de iniciar sesión y que ya se desconectó cuando comienza esta comprobación.
si es un sistema multiusuario Recomiendo agregar la cuenta de usuario que está buscando:
EDITAR:
En mi caso, tanto $ SSH_CLIENT como $ SSH_CONNECTION no existen.
fuente
El comando más simple para que los últimos 10 usuarios inicien sesión en la máquina es
last|head
. Para obtener todos los usuarios, simplemente use ellast
comandofuente
Estoy obteniendo el siguiente resultado de
who -m --ips
Debian 10:Parece que se agregó una nueva columna, por lo que los intentos de
{print $5}
" tomar la quinta columna " ya no funcionan.Prueba esto:
Fuente:
fuente