usar servidor instalar habilitar configurar conexion como comando linux networking ssh ip-address

linux - servidor - Encuentra la dirección IP del cliente en una sesión SSH



instalar ssh linux mint (17)

El último comando para que los últimos 10 usuarios inicien sesión en la máquina es el last|head .

Para obtener todos los usuarios, simplemente use el last comando

Tengo un script que debe ejecutar una persona que inicia sesión en el servidor con SSH .

¿Hay alguna forma de averiguar automáticamente a qué dirección IP se está conectando 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 entero.


Buscar conexiones SSH para la cuenta "myusername";

Tome la primera cadena de resultados;

Tome la quinta columna;

Dividir por ":" y devolver la 1ª parte (el número de puerto no es necesario, solo queremos IP):

netstat -tapen | grep "sshd: myusername" | cabeza -n1 | awk ''{split ($ 5, a, ":"); imprimir a [1]} ''

De otra manera:

quien soy yo | awk ''{l = longitud ($ 5) - 2; print substr ($ 5, 2, l)} ''


Compruebe si hay una variable de entorno llamada:

$SSH_CLIENT

O

$SSH_CONNECTION

(o cualquier otra variable de entorno) que se establece cuando el usuario inicia sesión. Luego, procese el script de inicio de sesión de usuario.

Extrae la IP:

$ echo $SSH_CLIENT | awk ''{ print $1}'' 1.2.3.4 $ echo $SSH_CONNECTION | awk ''{print $1}'' 1.2.3.4


Intente lo siguiente para obtener solo la dirección IP a través de SSH:

Command: ifconfig

Ejemplo:

stalinrajindian@ubuntuserver:~$ ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.30.3.27 netmask 255.255.255.0 broadcast 172.30.3.255 inet6 fe80::a00:27ff:fe8b:9986 prefixlen 64 scopeid 0x20<link> ether 08:00:27:8b:99:86 txqueuelen 1000 (Ethernet) RX packets 4876 bytes 1951791 (1.9 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 775 bytes 73783 (73.7 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 78 bytes 5618 (5.6 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 78 bytes 5618 (5.6 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0


Intente lo siguiente para obtener solo la dirección IP:

who am i|awk ''{ print $5}''


Linux: ¿quién soy yo? awk ''{print $ 5}'' | sed ''s / [()] // g''

AIX: ¿quién soy yo? awk ''{print $ 6}'' | sed ''s / [()] // g''


Mejorando en una respuesta anterior. Da dirección IP en lugar de nombre de host. --ips no disponible en OS X.

who am i --ips|awk ''{print $5}'' #ubuntu 14

más universal, cambie $ 5 a $ 6 para OS X 10.11:

WORKSTATION=`who -m|awk ''{print $5}''|sed ''s/[()]//g''` WORKSTATION_IP=`dig +short $WORKSTATION` if [[ -z "$WORKSTATION_IP" ]]; then WORKSTATION_IP="$WORKSTATION"; fi echo $WORKSTATION_IP


Por lo general, hay una entrada de registro en / var / log / messages (o similar, dependiendo de su sistema operativo) que puede grep con el nombre de usuario.


Puede obtenerlo de forma programática a través de una biblioteca SSH ( https://code.google.com/p/sshxcute )

public static String getIpAddress() throws TaskExecFailException{ ConnBean cb = new ConnBean(host, username, password); SSHExec ssh = SSHExec.getInstance(cb); ssh.connect(); CustomTask sampleTask = new ExecCommand("echo /"${SSH_CLIENT%% *}/""); String Result = ssh.exec(sampleTask).sysout; ssh.disconnect(); return Result; }


Puedes usar el comando:

server:~# pinky

eso te dará algo como esto:

Login Name TTY Idle When Where root root pts/0 2009-06-15 13:41 192.168.1.133


Simplemente escriba el siguiente comando en su máquina Linux:

who


Suponiendo que abre una sesión interactiva (es decir, asigna un pseudo terminal ) y tiene acceso a stdin, puede llamar a ioctl en ese dispositivo para obtener el número de dispositivo (/ dev / pts / 4711) e intentar encontrarlo en /var/run/utmp (donde también estará el nombre de usuario y la dirección IP desde donde se originó la conexión).


netstat funcionará (en la parte superior algo así) tcp 0 0 10.x.xx.xx: ssh someipaddress.or.domainame: 9379 ESTABLECIDO


un hilo viejo con muchas respuestas, pero ninguna es exactamente lo que estaba buscando, así que estoy contribuyendo al mío:

sshpid=$$ sshloop=0 while [ "$sshloop" = "0" ]; do if [ "$(strings /proc/${sshpid}/environ | grep ^SSH_CLIENT)" ]; then read sshClientIP sshClientSport sshClientDport <<< $(strings /proc/${sshpid}/environ | grep ^SSH_CLIENT | cut -d= -f2) sshloop=1 else sshpid=$(cat /proc/${sshpid}/status | grep PPid | awk ''{print $2}'') [ "$sshpid" = "0" ] && sshClientIP="localhost" && sshloop=1 fi done

este método es compatible con ssh directo, usuarios sudoed y sesiones de pantalla. Seguirá por el árbol de procesos hasta que encuentre un pid con la variable SSH_CLIENT y luego registre su IP como $ sshClientIP. si sube demasiado al árbol, registrará el IP como ''localhost'' y abandonará el ciclo.


netstat -tapen | grep ssh | awk ''{ print $10}''

Salida:

dos # en mi experimento

netstat -tapen | grep ssh | awk ''{ print $4}''

da la dirección IP.

Salida:

127.0.0.1:22 # in my experiment

Pero los resultados se mezclan con otros usuarios y esas cosas. Necesita más trabajo.


netstat -tapen | grep ssh | awk ''{ print $4}''


who am i | awk ''{print $5}'' | sed ''s/[()]//g'' | cut -f1 -d "." | sed ''s/-/./g'' export DISPLAY=`who am i | awk ''{print $5}'' | sed ''s/[()]//g'' | cut -f1 -d "." | sed ''s/-/./g''`:0.0

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.