ssh_config: określ komendę do wykonania na zdalnym komputerze podczas logowania

16

To rozwinięcie mojego wcześniejszego pytania . Muszę uruchomić lokalnie przechowywane polecenie (tj. mount /home) Na zdalnym komputerze podczas logowania ssh. W tej chwili używam:

ssh -t mymachine.example.com 'mount /home ; /bin/bash'

co działa dobrze, ale zastanawiałem się, czy mógłbym wprowadzić to polecenie do siebie, .ssh/configaby nie musiałem go wpisywać za każdym razem. Znalazłem LocalCommandopcję, ale nie widzę żadnej RemoteCommandopcji.

Ważne jest, aby command-to-be-executedbyły przechowywane na komputerze lokalnym, ponieważ będą zawierać hasło do otwarcia zaszyfrowanego dysku. To jest powód, dla którego nie mogę umieścić polecenia .profilena zdalnym komputerze.

Martin Vegter
źródło

Odpowiedzi:

6

To pytanie zostało zadane wcześniej na SuperUser. Pierwsza odpowiedź wykorzystuje zdalny plik, który nie spełnia twoich wymagań, ale druga odpowiedź sugerująca użycie lokalnego aliasu może być rozwiązaniem twojego problemu.

Ważne jest, aby polecenie do wykonania było przechowywane na komputerze lokalnym, ponieważ będzie zawierało hasło do otwarcia zaszyfrowanego dysku. To jest powód, dla którego nie mogę umieścić polecenia w pliku .profile na zdalnym komputerze.

To prawdopodobnie nie jest bezpieczne. Jeśli użyję echopolecenia jako polecenia ssh, pojawi się ono psna serwerze zdalnym:

martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"

hello
root     25358  0.0  0.0   5848  1296 ?        Ss   11:27   0:00 bash -c echo hello; ps aux|grep echo
root     25362  0.0  0.0   5012   828 ?        S    11:27   0:00 grep echo
Martin von Wittich
źródło
dzięki, ale w rozwiązaniu SuperUser ~/.ssh/rcjest ponownie przechowywany na zdalnym komputerze. Jeśli chodzi o komentarz na temat pswyświetlania moich parametrów wiersza poleceń (w tym hasła), nie przeszkadza mi to. To zdalna maszyna, której nie ufam. Z mojej lokalnej maszyny korzysta tylko ja, więc nikt inny nie ma do niej dostępu ps.
Martin Vegter,
6
To pswyjście pochodzi ze zdalnego komputera. Chodzi o to: wszystko, co dostarczasz sshjako zdalne polecenie, pojawi się na zdalnym serwerze w ps.
Martin von Wittich,
1
Tak masz rację. Dzięki za zwrócenie na to uwagi.
Martin Vegter,
1
@MartinvonWittich - Każda strona SE jest niezależna, więc jest całkowicie dopuszczalne, aby każda witryna miała podobne Q i A, o ile są na temat tej konkretnej strony. Zachęca się do kopiowania treści, jeśli pojawi się Q, a A znajduje się na innej stronie SE. Dostosuj go odpowiednio, aby był na temat.
slm
7

Zostało to dodane w OpenSSH 7.6:

dodaj opcję RemoteCommand, aby określić polecenie w pliku konfiguracyjnym ssh zamiast podawać je w wierszu poleceń klienta. Pozwala to plikowi konfiguracyjnemu określić polecenie, które zostanie wykonane na zdalnym hoście.

ref: https://www.openssh.com/txt/release-7.6

Camden Narzt
źródło
6
RequestTTY yes
RemoteCommand screen -UDr
JRG
źródło
świetny!! dzięki!!
shrish
2

Możesz to zrobić we współpracy ze zdalnym urządzeniem w następujący sposób.

Na komputerze lokalnym wpisz polecenie do uruchomienia w zmiennej środowiskowej LC_SSH_INITIAL_COMMAND. SSH jest zwykle skonfigurowany do przekazywania wszystkich zmiennych środowiskowych formularza LC_*, ponieważ są to zwykle ustawienia regionalne.

Na zdalnym komputerze uruchom eval "$LC_SSH_INITIAL_COMMAND" za pomocą ustawień poszczególnych kluczy w~/.ssh/authorized_keys lub z ~/.ssh/rc(uważaj, że jeśli masz ~/.ssh/rcplik, musisz zadbać o xauthręczne uruchomienie przekazywania X11).

Za pomocą tej authorized_keysmetody można podobnie uruchomić polecenie po zakończeniu sesji SSH (chyba że proces powłoki zostanie zabity nagle; powinieneś przynajmniej zatrzymać sygnał HUP, aby polecenie zostało wykonane, nawet jeśli połączenie zostanie przerwane).

Nie jest to jednak dobry układ do robienia czegoś globalnego, np. Montowania systemu plików. Musisz uważać, aby nie zamontować ponownie, jeśli system plików jest już zamontowany (na przykład z powodu równolegle działającego polecenia SSH) i nie odmontowywać podczas wylogowywania. Moja rekomendacja dla tego przypadku użycia jest jeszcze do zrobienia montażowej wyraźnie, a następnie uruchomić zdalnych poleceń, nie robiąc nic szczególnego, i odłączanie gdy nie chcesz aby uzyskać dostęp do plików.

Gilles „SO- przestań być zły”
źródło
0

Nie próbowałem tego, ale może być podejście

  • Zadeklaruj a Subsystem na pilocie, sshd_configktóry wykonuje żądane polecenie, czytając niektóre zmienne env
  • Użyj SendEnvna komputerze lokalnym, .ssh/configaby przekazać takie klucze do zdalnego serwera
odtąd
źródło