Je veux détecter à partir d'un script shell (plus précisément .zshrc) s'il est contrôlé via SSH. J'ai essayé la variable HOST mais c'est toujours le nom de l'ordinateur qui exécute le shell. Puis-je accéder au nom d'hôte d'où provient la session SSH? Comparer les deux résoudrait mon problème.
Chaque fois que je me connecte, il y a un message indiquant la dernière heure de connexion et l'hôte:
Last login: Fri Mar 18 23:07:28 CET 2011 from max on pts/1
Last login: Fri Mar 18 23:11:56 2011 from max
Cela signifie que le serveur a cette information.
ssh
shell-script
zsh
Stribika
la source
la source
.profile
. Et qu'est-ce que cela a à voir avec le transfert d'agent?SSH_AUTH_SOCK
variable. Mais pourquoi voudriez-vous exécuter un agent SSH dans ce cas? Voulez-vous dire démarrer un agent si vous êtes connecté sans retransmission d'agent? Pourquoi ne pas démarrer un agent s'il n'y en a pas déjà un ([ -n "$SSH_AUTH_SOCK" ] || eval $(ssh-agent)
)?SSH_*
variables sont également définies dans les sous-processus d'un shell se trouvant en tête d'une session SSH, par exemple si vous démarrez une session écran sur SSH (vous devez désélectionner les variables avant de démarrer la session si vous en tenez à vous). Je pense que la raison pour tester le processus parent est que j'ai commencé à le faire avant que sshd ne définisse une variable d'environnement.Vous devriez être en mesure de vérifier par les
SSH_TTY
,SSH_CONNECTION
ou lesSSH_CLIENT
variables.la source
env_keep
ensudoers
faire fonctionner à travers lessu
commandes :)Je viens d'avoir le même problème sous Linux, en utilisant Bash. J'ai d'abord utilisé la variable d'environnement SSH_CONNECTION, mais je me suis ensuite rendu compte qu'elle n'était pas définie si vous
su -
.La solution lastlog ci-dessus ne fonctionnait ni après
su
nisu -
.Enfin, je l’utilise
who am i
, ce qui indique l’adresse IP distante (ou le nom d’hôte) à la fin s’il s’agit d’une connexion SSH. Cela fonctionne également après le su.En utilisant des expressions régulières Bash, cela fonctionne:
Si zsh ne prend pas en charge les expressions rationnelles, la même chose peut être réalisée de différentes manières avec grep, cut, sed, etc.
Pour les curieux, voici ce que j’utilise pour cela, dans le fichier .bashrc de root:
Une alternative qui fonctionne également avec
su
serait de rechercher récursivement àsshd
travers les processus parents:Si la fonction est ajoutée à .bashrc, elle peut être utilisée comme
if is_ssh; then ...
la source
tmux
sessions à distance et présente également des problèmes si vous êtes connecté via IPv6 et qu’il n’existe pas de nom DNS inversé.who am i
montre pas votre adresse IPv6?who am i
ne renvoie rien dans unetmux
session à distance . 2) L’adresse IPv6 peut contenir des deux-points que votre regex n’autorise pas. Cela peut être délicat puisquewho am i
contient(:0.0)
dans X sessions pour moi (xterm).screen
.Je pense que les réponses de Gilles et Cakemox sont bonnes, mais juste pour être complet ...
vient de
pam_lastlog
1 .Vous pouvez imprimer des
pam_lastlog
informations en utilisant la commandelastlog
2 , par exemplepour un login local, comparé à
pour une connexion SSH.
Sur mon système, cela fonctionne pour l'extraire
last
etw
pourrait être utile aussi, par exemple1 Documentation Linux / FreeBSD pour
pam_lastlog
.2 pages de manuel Linux / FreeBSD
lastlog(8)
.la source
Commencez par examiner votre environnement et trouver la bonne option
Vous pouvez vous connecter à plusieurs de ces variables d'environnement pour déclencher des actions spécifiques en fonction de leur présence.
la source
Ceci est pour vérifier toutes les connexions établies d'un autre utilisateur utilisant SSH
la source