Załóżmy, że mam następującą sesję ssh:
userA@boxA -> userB@boxB -> userC@boxC
teraz, boxC
jako userC
, chciałbym mieć informację, że pochodzi połączenie ssh, z userB@boxB
którego z kolei pochodzi userA@boxA
.
teraz mam następującą sesję ssh wraz z pierwszą sesją ssh:
userD@boxD -> userB@boxB
od boxB
, ponieważ userB
chciałbym mieć informację, że połączenie pochodzi userD@boxD
i że nadchodzi druga sesja ssh userA@boxA
.
czy te informacje są dostępne i dostępne dla użytkownika? czy to w ogóle jest dostępne?
jeśli nie, to czy istnieje „łatwy” sposób na udostępnienie tych informacji? z easy mam na myśli bez hakowania i ponownej kompilacji sshd i bez konieczności posiadania uprawnień roota na komputerach.
Odpowiedzi:
Oficjalnym sposobem wysyłania zmiennych środowiskowych z klienta na serwer jest
SendEnv
iAcceptEnv
. Problem polega na tym, że do skonfigurowania potrzebujesz dostępu do roota na serwerzeAcceptEnv
. Większość serwerów jest skonfigurowana tak, aby nie przyjmować żadnych określonych zmiennych lub tylko kilka z nich.Znalazłem dwie sztuczki, aby przesłać zmienne środowiskowe z klienta na serwer, obie działają bez potrzeby dostępu do konta root na serwerze.
sztuczka pierwsza:
to połączy się z serwerem, a następnie wykona polecenie
SSH_ORIGIN=$USERNAME@$HOSTNAME bash
, z$USERNAME
i$HOSTNAME
już zastąpione po stronie klienta. następnie po stronie serwera możesz dalej przetwarzać informacje zawarte w zmiennejSSH_ORIGIN
.-t
potrzebna jest inaczej bash zostanie uruchomiony na serwerze bez tty (spróbuj go widać).niewielka modyfikacja pozwoli na tranzyt informacji w dłuższym łańcuchu ssh.
dyskusja:
.profile
nie jest czytana)..bashrc
jest odczytywany dwukrotnie). raz przez sshd i raz przez polecenie użytkownika.sztuczka druga:
najpierw musisz wygenerować klucz ssh i przenieść go
~/.ssh/authorized_keys
na serwer. następnie dodaj linię za pomocącommand="$SHELL"
. zobacz stronę man sshd, aby uzyskać więcej informacji na ten temat.połącz się z serwerem ssh za pomocą polecenia:
połączy się to z serwerem, ale tym razem przypisanie zmiennej nie zostanie wykonane. zamiast tego ciąg jest przechowywany w zmiennej środowiskowej
$SSH_ORIGINAL_COMMAND
. następnie~/.ssh/authorized_keys
wykonywane jest polecenie podane w . gdy znajdziesz się w powłoce, możesz przetwarzać informacje zawarte w$SSH_ORIGINAL_COMMAND
.jak wyżej, możesz zrobić to przechodnie:
dyskusja:
$SSH_ORIGINAL_COMMAND
. jeśli chcesz wykonać polecenie za pomocą ssh, możesz użyć innego klucza ssh lub mieć plik inicjujący powłoki w celu wykrycia i wykonania$SSH_ORIGINAL_COMMAND
.źródło
LC_*
zmiennych (są one zwykle używane przez ustawienia narodowe, ale można je obalić). Na przykładLC_FOO=bar ssh localhost 'echo $LC_FOO'
wyświetla siębar
na moim komputerze w domyślnej konfiguracji (na ściśnięciu Debiana).LC_*
, możesz użyć tego do wkradnięcia się do zmiennej. Spotkałem naprawdę paranoicznych sysadminów, których serwery nie akceptują nawet standardowychLC_*
zmiennych, po prostu w ogóle nie akceptują żadnych zmiennych.To polecenie
who
informuje, kto jeszcze jest zalogowany na tym samym komputerze i skąd się zalogował. Komendalast
podaje te same informacje dla poprzednich sesji. W zależności od konfiguracji komputera i metod logowania informacje nie zawsze są kompletne, aktualne lub dostępne dla użytkowników innych niż root.W twoim scenariuszu A @ A-> B @ B-> C @ C z maszyny C nie można wiedzieć, że B @ B był zalogowany do B za pośrednictwem sesji ssh z A. W latach 80., kiedy wszyscy ufali wszystkim, ty mógł próbować
finger
lubident
, ale w dzisiejszych czasach maszyna B prawdopodobnie nie uruchomi nawet demona finger lub ident.źródło
Myślę, że możesz zmusić zmienną środowiskową na hoście B do napisania adresu hostA. Następnie na hostC użyj AcceptEnv, aby uzyskać środowisko z hostB, voila :)
przeczytaj trochę sshd_config, części dotyczące środowiska.
źródło
Ze skrzynki C, bez dostępu do skrzynki B, nie będziesz w stanie powiedzieć, że użytkownik przyszedł ze skrzynki A. W rzeczywistości możesz nie być w stanie powiedzieć, w jaki sposób użytkownik dotarł do skrzynki C. To po prostu zależy od tego, jak administrator skonfigurował ustawienia.
Ta sama odpowiedź na pytanie „przypuśćmy dalej”. Zależy to od uprawnień udzielonych przez administratora systemu i zainstalowanych przez niego programów.
Odpowiednie polecenia, które mogłyby ci pomóc, gdybyś miał uprawnienia (ale prawdopodobnie nie masz):
źródło