Ich möchte anhand eines Shell-Skripts (genauer gesagt .zshrc) erkennen, ob es über SSH gesteuert wird. Ich habe die Variable HOST ausprobiert, aber es ist immer der Name des Computers, auf dem die Shell ausgeführt wird. Kann ich auf den Hostnamen zugreifen, von dem die SSH-Sitzung stammt? Ein Vergleich der beiden würde mein Problem lösen.
Jedes Mal, wenn ich mich anmelde, erscheint eine Meldung, die die letzte Anmeldezeit und den Host angibt:
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
Dies bedeutet, dass der Server über diese Informationen verfügt.
ssh
shell-script
zsh
stribika
quelle
quelle
.profile
. Und was hat das mit der Agentenweiterleitung zu tun?SSH_AUTH_SOCK
Variable. Aber warum sollten Sie in diesem Fall einen SSH-Agenten ausführen? Meinten Sie einen Agenten starten, wenn Sie ohne Agentenweiterleitung angemeldet sind? Warum nicht einen Agenten starten, wenn es noch keinen gibt ([ -n "$SSH_AUTH_SOCK" ] || eval $(ssh-agent)
)?SSH_*
Variablen werden auch in Unterprozessen einer Shell festgelegt, die sich am Anfang einer SSH-Sitzung befindet. Wenn Sie beispielsweise eine Bildschirmsitzung über SSH starten, sollten Sie die Variablen deaktivieren, bevor Sie die Sitzung starten. Ich denke, der Grund für das Testen des übergeordneten Prozesses ist, dass ich damit begonnen habe, bevor sshd Umgebungsvariablen definiert hat.Sie sollten über die überprüfen können
SSH_TTY
,SSH_CONNECTION
oderSSH_CLIENT
Variablen.quelle
env_keep
in hinzusudoers
, damit essu
befehlsübergreifend funktioniert :)Ich hatte gerade das gleiche Problem in Linux mit Bash. Ich habe zuerst die Umgebungsvariable SSH_CONNECTION verwendet, dann aber festgestellt, dass sie bei Ihnen nicht gesetzt ist
su -
.Die letzte Lösung funktionierte weder nach
su
noch nachsu -
.Schließlich verwende ich
who am i
, die die entfernte IP (oder den Hostnamen) am Ende zeigt, wenn es eine SSH-Verbindung ist. Es funktioniert auch nach su.Mit regulären Bash-Ausdrücken funktioniert Folgendes:
Wenn zsh keine regulären Ausdrücke unterstützt, kann dasselbe auf viele verschiedene Arten mit grep, cut, sed oder was auch immer erreicht werden.
Für die Neugierigen ist unten, wofür ich dies benutze, in root's .bashrc:
Eine Alternative, die auch funktioniert,
su
wäre, rekursivsshd
durch die übergeordneten Prozesse zu suchen :Wenn die Funktion zu .bashrc hinzugefügt wird, kann sie als verwendet werden
if is_ssh; then ...
quelle
tmux
Remotesitzungen und weist auch Probleme auf, wenn Sie über IPv6 angemeldet sind und kein DNS-Reverse-Name vorhanden ist.who am i
zeigt Ihre IPv6-Adresse nicht an?who am i
gibt in einer Remote-tmux
Sitzung nichts zurück . 2) Die IPv6-Adresse enthält möglicherweise Doppelpunkte, die Ihr regulärer Ausdruck nicht zulässt. Dies könnte schwierig sein , dawho am i
enthält(:0.0)
in X - Sitzungen für mich (xterm).screen
.Ich denke, die Antworten von Gilles und Cakemox sind gut, aber nur der Vollständigkeit halber ...
kommt von
pam_lastlog
1 .Sie können
pam_lastlog
Informationen mit dem Befehllastlog
2 drucken , zfür ein lokales Login im Vergleich zu
für ein SSH-Login.
Auf meinem System funktioniert dies, um es zu extrahieren
last
undw
könnte zum Beispiel auch hilfreich sein1 Linux / FreeBSD- Dokumentation für
pam_lastlog
.2 Linux / FreeBSD-
lastlog(8)
Manpages.quelle
Sehen Sie sich zunächst Ihre Umgebung an und finden Sie die richtige Option
Sie können sich in viele dieser Umgebungsvariablen einklinken, um bestimmte Aktionen basierend auf deren Vorhandensein auszulösen.
quelle
Hiermit können Sie alle Verbindungen anderer Benutzer mit SSH überprüfen
quelle