[gelöst] ssh-Sitzung in shell erkennen
[gelöst] ssh-Sitzung in shell erkennen
Hallo liebe Freunde der Shell
in meinem Prompt werte ich die Variable $SSH_CLIENT aus, damit ich nicht übersehen kann, dass ich gerade auf einem anderen System angemeldet bin.
Mit buster kann ich mich aber nicht mehr darauf verlassen:
Um apt oder ähnliche Tools nutzen zu können, muss ich mit "su -" root werden und damit ist die Variable weg. Kennt ihr einen anderen Weg eine ssh-Sitzung zu erkennen?
lg smutbert
in meinem Prompt werte ich die Variable $SSH_CLIENT aus, damit ich nicht übersehen kann, dass ich gerade auf einem anderen System angemeldet bin.
Mit buster kann ich mich aber nicht mehr darauf verlassen:
Um apt oder ähnliche Tools nutzen zu können, muss ich mit "su -" root werden und damit ist die Variable weg. Kennt ihr einen anderen Weg eine ssh-Sitzung zu erkennen?
lg smutbert
Zuletzt geändert von smutbert am 19.11.2018 17:20:06, insgesamt 1-mal geändert.
Re: ssh-Sitzung in shell erkennen
Statt 'su -' nehme vielleicht 'su' / 'su -p' / 'su -p -'.
'man su'
------------------------------------------------------------
'man su'
------------------------------------------------------------
Ups, hätte den buster-Hint besser berücksichtigen sollen.... muss ich mit "su -" root werden
Zuletzt geändert von rendegast am 16.11.2018 20:14:14, insgesamt 1-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: ssh-Sitzung in shell erkennen
Das wäre gut, allerdings widersprechen -m/-p dem Schalter -l/-/--login, das heißt sie werden laut manpage und Meldung von su ignoriert
und nur mit -m/-p habe ich wieder das Problem, dass PATH (und anderes) nicht gesetzt wird.
Code: Alles auswählen
$ su - -p
su: ignoring --preserve-environment, it's mutually exclusive with --login
Passwort:
Re: ssh-Sitzung in shell erkennen
Nö, man könnte auch alternativ /sbin in den PATH eintragen (und weiterhin "su" verwenden).smutbert hat geschrieben:16.11.2018 19:31:49Um apt oder ähnliche Tools nutzen zu können, muss ich mit "su -" root werden
Re: ssh-Sitzung in shell erkennen
'man su':
/etc/pam.d/su
->
/etc/security/pam_env.conf vielleicht in der Form (So ganz habe ich den Hinweistext nicht verstanden, ohne es ausgiebig auszuprobieren.
Also zBsp., ob ich SSH_CONNECTION als normale Variable so übergeben kann,
jedoch werden dort auch die "Normal"-Variablen DISPLAY und HOME benutzt.)
------------------------------------------
Ich habe verschiedene Formate versucht derart
"${HOME}"
${HOME}
$HOME
es klappt (hier) aber nur die Übergabe fester Werte.
?
->Other environments might be set by PAM modules.
/etc/pam.d/su
->
/etc/security/pam_env.conf vielleicht in der Form
Code: Alles auswählen
SSH_CONNECTION DEFAULT= OVERRIDE="${SSH_CONNECTION}"
Also zBsp., ob ich SSH_CONNECTION als normale Variable so übergeben kann,
jedoch werden dort auch die "Normal"-Variablen DISPLAY und HOME benutzt.)
------------------------------------------
Ich habe verschiedene Formate versucht derart
"${HOME}"
${HOME}
$HOME
es klappt (hier) aber nur die Übergabe fester Werte.
?
Zuletzt geändert von rendegast am 16.11.2018 22:15:18, insgesamt 1-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: ssh-Sitzung in shell erkennen
Smubert: ich hab lokal andere Farben für den Prompt als auf den Remotekisten, ausserdem sehen Kopf- und Fusszeile im Screen teilweise anders aus. Falls es Dir nur um "ups, Mist, jetzt hab ich die falsche Kiste runtergefahren" geht: mollyguard installieren.
Re: ssh-Sitzung in shell erkennen
Mit pstree prüfen, ob sshd ein Elternprozeß ist:
Da pstree nicht überall installiert ist, wäre eine Lösung mit ps schöner, aber ich weiß nicht, wie.
Code: Alles auswählen
pstree -ps $$ | grep -q sshd
Zuletzt geändert von MartinV am 17.11.2018 00:00:32, insgesamt 1-mal geändert.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.
Re: ssh-Sitzung in shell erkennen
Das mit pam_env habe ich auch nicht hinbekommen – irgendwie scheint die Variable SSH_CONNECTION (und SSH_CLIENT oder auch HOME) zu dem Zeitpunkt, zu dem sie gelesen wird leer oder undefiniert zu sein.
(Etwas ähnliches findet sich auch im Hinweistext in /etc/security/pam_env.conf, aber ich fürchte ich habe noch viel mehr nicht verstanden als rendegast.)
Um das Herunterfahren geht es mir weniger. Da gibt es andere Dinge, zum Beispiel die Suche nach dem frisch installierten, aber nicht auffindbaren Paket/Programm.
ich denke ich werde versuchen meine Nutzung von su anzupassen
Danke für die vielen Ideen
edit:
@MartinV
Das ist eine Idee - ich glaube das probiere ich noch aus.
(Etwas ähnliches findet sich auch im Hinweistext in /etc/security/pam_env.conf, aber ich fürchte ich habe noch viel mehr nicht verstanden als rendegast.)
Um das Herunterfahren geht es mir weniger. Da gibt es andere Dinge, zum Beispiel die Suche nach dem frisch installierten, aber nicht auffindbaren Paket/Programm.
ich denke ich werde versuchen meine Nutzung von su anzupassen
Danke für die vielen Ideen
edit:
@MartinV
Das ist eine Idee - ich glaube das probiere ich noch aus.
Re: ssh-Sitzung in shell erkennen
MartinVs Idee funktioniert hervorragend. Ich habe nun diesen Absatz in alle möglichen ~/.zshrc, ~/.bashrc, u. s. w. geschrieben
Code: Alles auswählen
if [ -z "${SSH_CLIENT}" ] && pstree -ps $$ | grep -q sshd ; then
export SSH_TTY="${TTY}"
export SSH_CONNECTION="unknown"
export SSH_CLIENT="unknown"
fi
Re: ssh-Sitzung in shell erkennen
Evtl. so:MartinV hat geschrieben:16.11.2018 23:00:35..., wäre eine Lösung mit ps schöner, aber ich weiß nicht, wie.
Code: Alles auswählen
ps -o ppid= $(pidof sshd) | grep -v 1
... oder so:
Code: Alles auswählen
ps -o ppid= $(pidof sshd) | grep -v 1 > /dev/null 2>&1; echo $?
Debian 12.8 mit LXDE, OpenBSD 7.6 mit i3wm, FreeBSD 14.1 mit Xfce
Re: [gelöst] ssh-Sitzung in shell erkennen
Es wäre nett ohne pstree auszukommen, aber das funktioniert nicht (zuverlässig). Da kommt "true" heraus, wenn jemand anderes eine ssh-Sitzung auf dem (lokalen) System hat, weil, wenn ich nichts übersehen habe, nicht überprüft wird ob sshd tatsächlich im Prozessbaum über der aktuellen Shell ist.
- heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: [gelöst] ssh-Sitzung in shell erkennen
Man kann sich das natürlich auch selbst via ps rekursiv rausfrickeln:
Code: Alles auswählen
check_if_from_sshd() {
local wanted_pid="$1"
while [ $wanted_pid -ne 1 ] ; do
process_line="$(ps -f -p "$wanted_pid"| tail -n1)"
wanted_pid="$(echo $process_line| awk '{print $3}')"
[[ $process_line =~ sshd ]] && return 0
done
return 1
}
check_if_from_sshd $$
echo "ssh: $?"
Re: [gelöst] ssh-Sitzung in shell erkennen
Schön gelöst, danke!heisenberg hat geschrieben:19.11.2018 20:06:31Man kann sich das natürlich auch selbst via ps rekursiv rausfrickeln:
Eine Erbse zähle ich: Du hast "local process_line" vergessen.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.