Réponses:
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.)
telnetddéfinissent la variable d'environnement REMOTEHOSTou similaire que vous pouvez vérifierxinetdd' exécution, vous pouvez modifier l' telnetdenvironnement via l' envattributssh(OpenSSH), alors vous pouvez vérifier l’une des variables SSH_TTYet SSH_CONNECTION.Les terminaux virtuels de la console Linux (avant de démarrer X) auront des noms de tty similaires à /dev/tty1ceux 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 bashscript:
function checkparents()
{
local _proc=$1 _pid _ppid=$$ _tty="" _comm _rc=1
while [ "$_ppid" != "1" ]; do
read _pid _ppid _tty _comm < <(ps --no-headers -p $_ppid -o "pid ppid tty comm")
#echo "$_pid $_ppid $_tty $_comm"
[ "$_comm" = "$_proc" ] && { _rc=0; break; }
[ "$_pid" = "$_proc" ] && { _rc=0; break; }
done
return $_rc
}
Lorsqu'il est exécuté via un sshlogin, par exemple:
$ if checkparents sshd; then echo ssh; fi
ssh
$ if ! checkparents in.telnetd; then echo not telnet; fi
not telnet
Décommentez la echoligne pour la voir fonctionner.
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
typeset -a LOGINARRAY
# who am I format: USER TTY MON DAY TIME LOGINHOST,
# use array to get last entry
LOGINARRAY=( $(/usr/bin/who -sum) )
LASTINDEX=$(( ${#LOGINARRAY[*]} - 1))
LOGINHOST=${LOGINARRAY[$LASTINDEX]}
LOGINHOST=${LOGINHOST##*\(}
LOGINHOST=${LOGINHOST%%)*}
DISPLAY=$LOGINHOST:0
export DISPLAY
unset LOGINARRAY LASTINDEX
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