J'ai un script qui doit être exécuté par une personne qui se connecte au serveur avec SSH .
Existe-t-il un moyen de savoir automatiquement à partir de quelle adresse IP l'utilisateur se connecte?
Bien sûr, je pourrais demander à l'utilisateur (c'est un outil pour les programmeurs, donc pas de problème avec ça), mais ce serait plus cool si je venais de le découvrir.
linux
networking
ssh
ip-address
flybywire
la source
la source
Réponses:
Vérifiez s'il existe une variable d'environnement appelée:
OU
(ou toute autre variable d'environnement) qui est définie lorsque l'utilisateur se connecte. Puis traitez-la à l'aide du script de connexion utilisateur.
Extraire l'IP:
la source
${SSH_CLIENT%% *}
sudo -E
Vous pouvez utiliser la commande:
cela vous donnera quelque chose comme ceci:
la source
pinky --help
:A lightweight 'finger' program; print user information. The utmp file will be /var/run/utmp.
Essayez ce qui suit pour obtenir uniquement l'adresse IP:
la source
who am i
! =whoami
sur mon Linux au moins. Il y a une cinquième chose, et c'est le nom d'hôte du client.who am i
: La page de manuelwho
dit:If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.
. Donc vraiment tout ce qui a deux mots fonctionne, aussi des choses commewho likes icecream
.who -m --ips|awk '{print $5}'
telle sorte que je n'avais que IP et pas de réponse inverse-DNS. Merci pour l'aidewho am i
!who am i|awk '{ print $5}'
(tmux(2445).%3)
Tapez simplement la commande suivante sur votre machine Linux:
la source
la source
J'utilise ceci pour déterminer ma variable DISPLAY pour la session lors de la connexion via ssh et j'ai besoin d'afficher X distant.
la source
who am i | awk '{print $6}' | sed 's/[()]//g' | sed 's/\./\\./g'
la dernière partie échappe aux points.Amélioration sur une réponse antérieure. Donne une adresse IP au lieu du nom d'hôte. --ips non disponible sur OS X.
plus universel, changez 5 $ en 6 $ pour OS X 10.11:
la source
la source
(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$'
fonctionne-t-il?Vous pouvez l'obtenir de manière programmatique via une bibliothèque SSH ( https://code.google.com/p/sshxcute )
la source
netstat fonctionnera (en haut quelque chose comme ça) tcp 0 0 10.x.xx.xx: ssh someipaddress.or.domainame: 9379 ESTABLISHED
la source
Production:
deux # dans mon expérience
donne l'adresse IP.
Production:
Mais les résultats sont mélangés avec d'autres utilisateurs et des trucs. Il faut plus de travail.
la source
un fil plus ancien avec beaucoup de réponses, mais aucune n'est tout à fait ce que je cherchais, alors je contribue le mien:
cette méthode est compatible avec ssh direct, les utilisateurs sudoed et les sessions d'écran. il suivra l'arborescence des processus jusqu'à ce qu'il trouve un pid avec la variable SSH_CLIENT, puis enregistrera son adresse IP sous la forme $ sshClientIP. s'il va trop loin dans l'arborescence, il enregistrera l'adresse IP comme 'localhost' et quittera la boucle.
la source
Habituellement, il y a une entrée de journal dans / var / log / messages (ou similaire, selon votre système d'exploitation) que vous pouvez grep avec le nom d'utilisateur.
la source
Linux: qui suis-je | awk '{imprimer $ 5}' | sed 's / [()] // g'
AIX: qui suis-je | awk '{imprimer $ 6}' | sed 's / [()] // g'
la source
Recherchez les connexions SSH pour le compte "myusername";
Prenez la première chaîne de résultat;
Prenez la 5e colonne;
Diviser par ":" et retourner la 1ère partie (le numéro de port n'est pas nécessaire, nous voulons juste IP):
netstat -tapen | grep "sshd: mon nom d'utilisateur" | head -n1 | awk '{split (5 $, a, ":"); imprimer un [1]} '
Autrement:
qui suis-je | awk '{l = longueur (5 $) - 2; imprimer substr ($ 5, 2, l)} '
la source
sudo ss -tapen | grep "sshd: $(whoami)"|head -n1|awk '{split($5, a, ":"); print a[1]}'
dit que mon client ssh est de2a02
et que votre "Autre moyen:" dittmux(2445).%3
En supposant qu'il ouvre une session interactive (c'est-à-dire qu'il alloue un pseudo terminal ) et que vous avez accès à stdin, vous pouvez appeler un ioctl sur cet appareil pour obtenir le numéro de l'appareil (/ dev / pts / 4711) et essayer de trouver celui-ci dans / var / run / utmp (où il y aura également le nom d'utilisateur et l'adresse IP d'où provient la connexion).
la source
Un pouce pour la réponse de @Nikhil Katre:
Celui qui utilise
who
oupinky
fait ce qui est fondamentalement demandé. Mais mais ils ne donnent pas d'informations sur les sessions historiques.Ce qui peut également être intéressant si vous souhaitez connaître quelqu'un qui vient de se connecter et de se déconnecter déjà lorsque vous démarrez cette vérification.
s'il s'agit d'un système multi-utilisateur. Je recommande d'ajouter le compte utilisateur que vous recherchez:
ÉDITER:
Dans mon cas, $ SSH_CLIENT et $ SSH_CONNECTION n'existent pas.
la source
La commande la plus simple pour obtenir les 10 derniers utilisateurs connectés à la machine est
last|head
. Pour obtenir tous les utilisateurs, utilisez simplement lalast
commandela source
J'obtiens la sortie suivante de
who -m --ips
Debian 10:On dirait qu'une nouvelle colonne a été ajoutée, donc les tentatives de
{print $5}
" prendre la 5ème colonne " ne fonctionnent plus.Essaye ça:
La source:
la source