Trouver l'adresse IP du client dans une session SSH
J'ai un script qui doit être exécuté par une personne qui se connecte au serveur avec SSH.
Est-il un moyen de savoir automatiquement l'adresse IP de 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 mieux si je viens de découvrir.
- proposer de déménager à serverfault, encore une bonne question, si
Vous devez vous connecter pour publier un commentaire.
Vérifier s'il existe une variable d'environnement appelée:
OU
(ou toutes les autres variables d'environnement) qui est défini lorsque l'utilisateur se connecte. Puis traiter à l'aide de la connexion de l'utilisateur du script.
Extrait de la propriété intellectuelle:
${SSH_CLIENT%% *}
sudo -E
Vous pouvez utiliser la commande:
qui vous donnera somehting comme ceci:
pinky --help
:A lightweight 'finger' program; print user information. The utmp file will be /var/run/utmp.
Essayez ce qui suit pour obtenir l'adresse IP:
who am i
!=whoami
sur mon Linux au moins. Il y a un cinquième de chose, et c'est le nom d'hôte du client.who am i
: La page de manuel pourwho
dit:If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.
. Si vraiment tout avec deux mots d'œuvres, aussi des choses commewho likes icecream
.who -m --ips|awk '{print $5}'
alors que je n'avais IP et pas de reverse-dns réponse. Merci pour l'aide surwho am i
!Il suffit de taper la commande suivante sur votre machine Linux:
Je l'utilise pour déterminer ma variable d'AFFICHAGE pour la session lors de la connexion via ssh et besoin d'afficher à distance X.
who am i | awk '{print $6}' | sed 's/[()]//g' | sed 's/\./\\./g'
La dernière partie échappe point à l'autre.S'améliorer avant de répondre. Donne l'adresse ip au lieu du nom d'hôte. --ips ne sont pas disponibles sur OS X.
plus universel, le changement de 5 $à 6 $pour OS X 10.11:
(No info could be read for "-p": geteuid()=507 but you should be root.)
De sortie:
deux # dans mon expérience
donne l'adresse IP.
De sortie:
Mais les résultats sont partagés avec d'autres utilisateurs et d'autres choses. Il a besoin de plus de travail.
Vous pouvez l'obtenir dans un par programme via SSH bibliothèque (https://code.google.com/p/sshxcute)
netstat travailler (en haut à quelque chose comme ça)
tcp 0 0 10.x.xx.xx:ssh someipaddress.ou.domainame:9379 ÉTABLI
Linux: qui suis-je | awk '{print $5}' | sed 's/[()]//g'
AIX: qui suis-je | awk '{print $6}' | sed 's/[()]//g'
De recherche pour les connexions SSH pour "myusername" compte;
Prendre la première chaîne de résultat;
Prendre 5ème colonne;
Divisé par ":" et le retour de la 1ère partie (numéro de port n'est pas nécessaire, nous voulons juste IP):
netstat -tapen | grep "sshd: myusername" | head -n1 | awk '{split($5, a, ":"); print a[1]}'
D'une autre manière:
qui suis-je | awk '{l = longueur($5) - 2; print substr($5, 2, l)}'
Habituellement, il ya une entrée de journal dans /var/log/messages (ou similaires, en fonction de votre OS) que vous pourriez grep avec le nom d'utilisateur.
En supposant qu'il ouvre une session interactive (qui est, alloue un pseudo terminal) et vous avez accès à stdin, vous pouvez appeler un ioctl sur cet appareil pour obtenir le numéro de périphérique (/dev/pts/4711) et essayer de trouver un /var/run/utmp (où il y aura également le nom d'utilisateur et l'adresse IP de la connexion provient d').
un vieux thread avec beaucoup de réponses, mais aucune n'est tout à fait ce que je cherchais, donc je suis en contribuant mine:
cette méthode est compatible avec direct ssh, sudoed les utilisateurs et les sessions écran. il sera sentier à travers le processus de l'arbre jusqu'à ce qu'il trouve un pid avec la SSH_CLIENT variable, puis d'enregistrer son adresse IP que d' $sshClientIP. si il fait trop loin vers le haut de l'arbre, il va enregistrer l'IP comme 'localhost' et sortir de la boucle.
Le pouce vers le haut pour @Nikhil Katre réponse :
L'une à l'aide de
who
oupinky
fait ce qui est demandé. Mais, mais, mais ils ne donnent pas à l'historique des sessions d'info.Qui pourrait aussi être intéressant si vous voulez savoir à quelqu'un qui s'est connecté et
déconnecté déjà lors du lancement de cette vérification.
si c'est un système multi-utilisateur. Je le conseille d'ajouter le compte d'utilisateur que vous cherchez:
EDIT:
Dans mon cas, les deux $SSH_CLIENT et $SSH_CONNECTION n'existent pas.
Essayez ce qui suit pour obtenir l'adresse IP via SSH:
Exemple: