[gelöst] ssh-Sitzung in shell erkennen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

[gelöst] ssh-Sitzung in shell erkennen

Beitrag von smutbert » 16.11.2018 19:31:49

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
Zuletzt geändert von smutbert am 19.11.2018 17:20:06, insgesamt 1-mal geändert.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: ssh-Sitzung in shell erkennen

Beitrag von rendegast » 16.11.2018 19:41:48

Statt 'su -' nehme vielleicht 'su' / 'su -p' / 'su -p -'.

'man su'


------------------------------------------------------------
... muss ich mit "su -" root werden
Ups, hätte den buster-Hint besser berücksichtigen sollen.
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")

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: ssh-Sitzung in shell erkennen

Beitrag von smutbert » 16.11.2018 19:53:03

Das wäre gut, allerdings widersprechen -m/-p dem Schalter -l/-/--login, das heißt sie werden laut manpage und Meldung von su ignoriert

Code: Alles auswählen

$ su - -p
su: ignoring --preserve-environment, it's mutually exclusive with --login
Passwort:
und nur mit -m/-p habe ich wieder das Problem, dass PATH (und anderes) nicht gesetzt wird.

owl102

Re: ssh-Sitzung in shell erkennen

Beitrag von owl102 » 16.11.2018 20:09:12

smutbert hat geschrieben: ↑ zum Beitrag ↑
16.11.2018 19:31:49
Um apt oder ähnliche Tools nutzen zu können, muss ich mit "su -" root werden
Nö, man könnte auch alternativ /sbin in den PATH eintragen (und weiterhin "su" verwenden).

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: ssh-Sitzung in shell erkennen

Beitrag von rendegast » 16.11.2018 20:44:50

'man su':
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}"
(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.
?
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")

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: ssh-Sitzung in shell erkennen

Beitrag von eggy » 16.11.2018 21:55:46

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.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: ssh-Sitzung in shell erkennen

Beitrag von MartinV » 16.11.2018 23:00:35

Mit pstree prüfen, ob sshd ein Elternprozeß ist:

Code: Alles auswählen

pstree -ps $$ | grep -q sshd
Da pstree nicht überall installiert ist, wäre eine Lösung mit ps schöner, aber ich weiß nicht, wie.
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.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: ssh-Sitzung in shell erkennen

Beitrag von smutbert » 16.11.2018 23:23:45

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.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: ssh-Sitzung in shell erkennen

Beitrag von smutbert » 19.11.2018 17:19:55

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

mat6937
Beiträge: 2946
Registriert: 09.12.2014 10:44:00

Re: ssh-Sitzung in shell erkennen

Beitrag von mat6937 » 19.11.2018 17:39:43

MartinV hat geschrieben: ↑ zum Beitrag ↑
16.11.2018 23:00:35
..., wäre eine Lösung mit ps schöner, aber ich weiß nicht, wie.
Evtl. so:

Code: Alles auswählen

ps -o ppid= $(pidof sshd) | grep -v 1
EDIT:

... oder so:

Code: Alles auswählen

ps -o ppid= $(pidof sshd) | grep -v 1 > /dev/null 2>&1; echo $?

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: [gelöst] ssh-Sitzung in shell erkennen

Beitrag von smutbert » 19.11.2018 19:28:30

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.

Benutzeravatar
heisenberg
Beiträge: 3526
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst] ssh-Sitzung in shell erkennen

Beitrag von heisenberg » 19.11.2018 20:06:31

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: $?"
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: [gelöst] ssh-Sitzung in shell erkennen

Beitrag von MartinV » 19.11.2018 20:26:35

heisenberg hat geschrieben: ↑ zum Beitrag ↑
19.11.2018 20:06:31
Man kann sich das natürlich auch selbst via ps rekursiv rausfrickeln:
Schön gelöst, danke!
Eine Erbse zähle ich: Du hast "local process_line" vergessen. :wink:
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Antworten