Lösung 1:
Sie könnten die Befehlsausgabe "w" oder "who" verwenden. Wenn Sie sich über ssh verbinden, wird Ihre Quell-IP angezeigt.
Lösung 2:
Hier ist eine großartige Antwort, die ich auf unix.stackexchange gefunden habe:
- Wenn eine der Variablen
SSH_CLIENT
oderSSH_TTY
definiert ist, handelt es sich um eine SSH-Sitzung. - Der übergeordnete Prozess der Login-Shell kann mit
ps -o comm= -p $PPID
überprüft werden . Wenn essshd
ist , es ist eine SSH-Sitzung.
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
SESSION_TYPE=remote/ssh
else
case $(ps -o comm= -p $PPID) in
sshd|*/sshd) SESSION_TYPE=remote/ssh;;
esac
fi
Lösung 3:
Sie könnten SSH_*
hinzufügen bis env_keep
in sudoers
damit dies erkannt werden kann, während auf den anderen Benutzer umgeschaltet wird.
Lösung 4:
Wenn Sie wissen möchten, ob Ihre Bash-Shell direkt ein untergeordneter Prozess von sshd ist (nicht n>1 Schichten tief), können Sie das tun
cat /proc/$PPID/status | Kopf -1 | schneide -f2
es sollte Ihnen sshd
geben oder wie auch immer der übergeordnete Prozessname Ihrer aktuellen Shell lautet.
Lösung 5:
Ich glaube, Sie wollen Ihre Sichtweise auf das Problem überdenken. Die Frage ist nicht "bin ich über SSH eingeloggt, weil ich bestimmte Befehle ausschalten möchte." Es ist "bin ich an der Konsole angemeldet, weil ich dann bestimmte Befehle aktivieren werde."