2010-12-10 10 views
30

Pracuję z kilkoma różnymi serwerami i przydałoby się ustawić niektóre zmienne środowiskowe, tak aby były aktywne na każdym z nich, gdy włączyłem SSH. Problem polega na tym, że zawartość niektórych zmiennych zawiera poufne informacje (zakodowane hasła), więc nie chcę zostawiać go w pliku .bashrc - chciałbym zachować go tylko w pamięci.Czy mogę przekazywać zmienne env przez ssh?

Wiem, że możesz użyć SSH do przekazania zmiennej DISPLAY (przez ForwardX11) lub proces SSH Agent (przez ForwardAgent), więc zastanawiam się, czy istnieje sposób automatycznego przekazywania zawartości dowolnych zmiennych środowiskowych przez SSH znajomości. Najlepiej byłoby ustawić coś w pliku .ssh/config, aby uruchamiało się automatycznie, gdy tego potrzebuję. Jakieś pomysły?

Odpowiedz

22

Można, ale wymaga to zmiany konfiguracji serwera.

Przeczytaj wpisy dla AcceptEnv w sshd_config(5) i SendEnv w ssh_config(5).

aktualizacja:

Można również przekazać je w wierszu poleceń:

ssh [email protected] "FOO=foo BAR=bar doz" 

zakresie bezpieczeństwa, noty niż ktokolwiek z dostępem do zdalnej maszyny będą mogli zobaczyć zmiennych środowiskowych przekazywanych do każdego działającego procesu.

Jeśli chcesz zachować tę informację w tajemnicy, że lepiej jest przekazać ją poprzez stdin:

cat secret_info | ssh [email protected] remote_program 
+1

Zajęło mi trochę czasu, zanim przypomniałem sobie, że musiałem zrestartować sshd, aby ponownie odczytać jego pliki konfiguracyjne, ale kiedy to zrobiłem, "AcceptEnv" i "SendEnv" działały jak czar. Dokładnie to, czego szukałem! Dzięki! – singingwolfboy

11

Nie można zrobić to automatycznie (za wyjątkiem $DISPLAY które można przesłać z -X wraz z informacji Xauth programy tak odległych rzeczywistości może połączyć się z wyświetlacza), ale można użyć skryptu z dokumentu „” tutaj:

ssh ... <<EOF 
export FOO="$FOO" BAR="$BAR" PATH="\$HOME/bin:\$PATH" 
runRemoteCommand 
EOF 

Zmienne bez zmian zostaną rozwinięte lokalnie, a wynik zostanie przekazany stronie zdalnej. Tak więc PATH zostanie ustawiony z wartością zdalną $HOME.

+0

Opcja 'zmienne Niecytowany zostanie poszerzona część locally' zapisany mój dzień. Nie zostało to wyjaśnione w innych podręcznikach. Dziękuję Ci! – Kolyunya