Je souhaite exécuter une commande chaque fois que je me connecte à ma boîte Ubuntu, mais uniquement si je me connecte via Telnet, pas si je me connecte à la console.
2
Quelque chose comme ça dans votre .bashrc (en supposant que bash) fonctionne assez bien:
if ( tty | egrep -q '\/pts\/' )
then
echo "is a pts - remote login"
else
echo "is not a pts - local login"
fi
Vous ne feriez que remplacer l'écho par ce que vous vouliez utiliser.
telnet? Je ne recommande pas son utilisation! L'une des approches suivantes devrait fonctionner pour la plupart des méthodes d'accès à distance. (L'accès à distance via un client X, ou via VNC ou une exception similaire constitue une exception excusable.)
telnetd
définissent la variable d'environnementREMOTEHOST
ou similaire que vous pouvez vérifierxinetd
d' exécution, vous pouvez modifier l'telnetd
environnement via l'env
attributssh
(OpenSSH), alors vous pouvez vérifier l’une des variablesSSH_TTY
etSSH_CONNECTION
.Les terminaux virtuels de la console Linux (avant de démarrer X) auront des noms de tty similaires à
/dev/tty1
ceux de pty (pseudo-ttys) dans/dev/pts/
(au moins sur x86). Dans X, les terminaux se verront attribuer des ptys.La vérification des variables d'environnement peut souvent être subvertie par les utilisateurs, si cela pose un problème.
Une solution de cas générale plus robuste consiste à parcourir l'arborescence de processus à partir de $$ jusqu'à ce que vous trouviez ce que vous cherchez (ou pas), utilisez-la dans un
bash
script:Lorsqu'il est exécuté via un
ssh
login, par exemple:Décommentez la
echo
ligne pour la voir fonctionner.la source
Personnellement, je munge la sortie de "qui suis-je" pour d'autres raisons (réglage DISPLAY). Le dernier champ semble être la "source" de la connexion
il devrait être assez facile de vérifier le format de LOGINHOST pour voir s’il s’agit d’un login "distant". telnet est désactivé ici (comme il se doit), donc je ne peux pas vérifier explicitement comment il est configuré pour telnet
la source