Oficjalnym sposobem wysyłania zmiennych środowiskowych z klienta na serwer jest SendEnvi AcceptEnv. Problem polega na tym, że do skonfigurowania potrzebujesz dostępu do roota na serwerze AcceptEnv. 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:
ssh -t server SSH_ORIGIN=$USERNAME@$HOSTNAME bash
to połączy się z serwerem, a następnie wykona polecenie SSH_ORIGIN=$USERNAME@$HOSTNAME bash, z $USERNAMEi $HOSTNAMEjuż zastąpione po stronie klienta. następnie po stronie serwera możesz dalej przetwarzać informacje zawarte w zmiennej SSH_ORIGIN.
-tpotrzebna 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.
ssh -t server SSH_ORIGIN=$USERNAME@$HOSTNAME:$SSH_ORIGIN bash
dyskusja:
- bash jest uruchamiany jako interaktywna powłoka niezalogowana (
.profilenie jest czytana).
- bash jest uruchamiany dwukrotnie (
.bashrcjest odczytywany dwukrotnie). raz przez sshd i raz przez polecenie użytkownika.
- zawsze zacznie bash, ignorując domyślną powłokę na serwerze.
sztuczka druga:
najpierw musisz wygenerować klucz ssh i przenieść go ~/.ssh/authorized_keysna 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:
ssh -t server SSH_ORIGIN=$USERNAME@$HOSTNAME
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_keyswykonywane 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:
ssh -t server SSH_ORIGIN=$USERNAME@$HOSTNAME:$SSH_ORIGIN
dyskusja:
- uruchomi domyślną powłokę na serwerze.
- zawsze uruchomi domyślną powłokę na serwerze. każde polecenie, które podasz ssh, zostanie zignorowane i zapisane w
$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.