To pytanie ma już odpowiedź tutaj:
Jak mogę przekazać wartość do polecenia ssh, tak aby środowisko uruchomione na komputerze hosta zaczynało się od określonej zmiennej środowiskowej wybranej przeze mnie?
EDYCJA: Celem jest przekazanie bieżącego pulpitu kde (z dcop kwin KWinInterface currentDesktop) do nowej powłoki utworzonej, aby móc przekazać lokalizacje nfs do mojej instancji JEdit na oryginalnym serwerze, która jest unikalna dla każdego pulpitu KDE. (Korzystanie z mechanizmu takiego jak emacsserver / emacsclient )
Powodem, dla którego wiele instancji ssh może być w locie, jest to, że kiedy konfiguruję swoje środowisko, otwieram kilka różnych instancji ssh na różnych maszynach.
źródło
SendEnv
Opcja jest Twój facet.~ / .ssh / config: (lokalnie)
/ etc / ssh / sshd_config: (na zdalnym końcu)
Teraz, bez względu na wartość
$MYVAR
lokalnie, staje się ona dostępna również w sesji zdalnej.Jeśli zalogujesz się wiele razy, każda sesja będzie miała własną kopię
$MYVAR
z możliwie różnymi wartościami.~/.ssh/environment
jest przeznaczony do innych celów. To działa jak$ENV
plik podczas zdalnego wykonywania poleceń innych niż powłoki .źródło
ssh myserver -o SendEnv="MYVAR"
, aby można było uczynić go dynamicznym w skryptach.Jest też okropny, okropny hack.
Jeśli twój skrypt zużywa zmienną na odległym końcu (tzn. Możesz nazwać ją jak chcesz), możesz nadużyć zmiennych regionalnych. Każda zmienna w postaci LC_ * będzie przekazywana dosłownie, bez konieczności jakiejkolwiek konfiguracji.
Na przykład mamy serię serwerów bastionowych u jednego z moich klientów. Nienawidzę konieczności łączenia się z nim, aby połączyć się z innym serwerem ... i innym serwerem ... za każdym razem. Mam skrypt, który zachowuje się jak SSH, tyle że jest sprytny.
Zasadniczo, jeśli ustawiony jest LC_BOUNCE_HOSTS, dzieli go na spacje i usuwa pierwszy host. Następnie odbija się i uruchamia ten sam skrypt. W węźle docelowym ta lista jest ostatecznie pusta, więc uruchamia polecenie. Mam również tryb debugowania (który jest świetny podczas problemów z siecią), który jest ustawiany przez LC_BOUNCE_DEBUG. Ponieważ ssh przekazuje mi to wszystko magicznie, nie muszę robić nic poza rozpoznawaniem końca listy hostów (co robię z opcją -).
Czuję się brudny za każdym razem, gdy go używam, ale działa wszędzie, gdzie go wypróbowałem.
źródło
ProxyCommand
opcji OpenSSH ? Edytuj swój~/.ssh/config
i dodaj blok podobnyHost *.example.com: ProxyCommand -ssh -W %h:%p bastionhost
i pozwól mu tunelować twoje połączenia dla Ciebie.Możesz przekazać wartości za pomocą polecenia podobnego do następującego:
Możesz przetestować za pomocą:
Na tcsh wydaje się, że działają:
źródło
&&
). Wexport VAR=value;
tym przypadku działa bash zamiast setenv w trzeciej formie.ssh user@host "$(<env_to_source.sh) command ..."
. W env do source mamexport var=value ;
na osobnych wierszach (pamiętaj średnik).Na bash testowałem z:
źródło