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_CLIENToderSSH_TTYdefiniert 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 essshdist , 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."