Czy jest jakiś sposób, aby zmusić SSH do użycia określonej powłoki na odległym końcu, niezależnie od domyślnej powłoki użytkownika?
Próbowałem rozwiązań podobnych do:
ssh host.domain.com /bin/bash -c 'complicated, multi-line command'
ale niestety domyślna powłoka na zdalnym końcu jest odpowiedzialna za parsowanie części „skomplikowanej, wieloliniowej komendy” i mam trudności z ucieczką wystarczająco, by działać zarówno dla użytkowników powłoki Bash, jak i C.
ssh
bash
shell
command-line-interface
Plinehan
źródło
źródło
Odpowiedzi:
Nie sądzę, aby było to możliwe, przynajmniej w przypadku systemów opartych na openssh. Jeśli masz taką możliwość, lepszym rozwiązaniem może być sftp w górę pliku skryptu powłoki, a następnie wykonanie go za pomocą opublikowanej metody. Miałoby to tę zaletę, że minimalizowało liczbę potrzebnych znaków ucieczki, ale pozostawiałoby plik, który musiałby zostać usunięty (być może jako ostatni krok skryptu).
źródło
Użyj heredoc:
źródło
cat /tmp/tempfile_containing_your_script ssh ${hostname} /bin/bash
. Zamiast jednego kroku masz dwa kroki: krok 1 skopiuj skrypt do pliku, krok 2cat
skrypt dossh
.Używaj logowań opartych na kluczach, a nie na hasłach. Następnie możesz dodać (listę) „poleceń wymuszonych” do swojego publicznego klucza ssh (w polu „opcje” w przypadku SSH1), który jest zainstalowany na serwerze (w pliku ~ / .ssh / Author_keys dla SSH1 , ~ / .ssh2 / autoryzacja dla SSH2).
Wykonaj swoje wymuszone polecenie, aby żądana powłoka nazywała się ...
Więcej: Możesz powiązać co najwyżej jedno polecenie wymuszone z danym klawiszem. Jeśli potrzebujesz wielu wymuszonych poleceń do różnych celów, musisz skonfigurować różne klucze. (Oczywiście, możesz umieścić wiele rzeczy w jednym skrypcie, który wywołujesz za pomocą polecenia wymuszonego. Pamiętaj jednak, że polecenia wymuszone są zawsze uruchamiane dla danego konta / klucza, jeśli użytkownik się zaloguje, niezależnie od tego, czy poprosił o coś innego do uruchomienia. Jeśli nadal chcesz uszanować pierwotne polecenie, sprawdź, jak wykorzystać
$SSH_ORIGINAL_COMMAND
zmienną ...)Przeczytaj o „wymuszonych poleceniach” przez Google .
źródło
/etc/sshrc
.Możesz użyć tej
-t
opcji, aby wymusić przydział pseudo-tty dla programu, który chcesz uruchomić, tak jakbyś wykonywał standardową powłokę. Następnie przekaż pożądaną powłokę jako zwykły stary argument.Dzięki tej technice możesz nie tylko używać zainstalowanej powłoki, ale także otwierać vim i inne programy, które wymagają TTY, za pomocą jednego polecenia. Co jest fajne, jeśli piszesz skrypt powłoki, który gdzieś cię loguje i otwiera plik na vimie, htopie lub czymś podobnym.
Nie jestem pewien, czy jest to powłoka logowania, ale istnieją opcje, dzięki którym bash będzie zachowywał się jak powłoka logowania, więc twoja powłoka również może to mieć.
źródło
Niespodziewanie widzę różne wyniki z następującymi:
uruchom w desce rozdzielczej:
vs bash:
Wyświetlenie w pełni cytowanego polecenia działa zgodnie z oczekiwaniami.
źródło
sh -c "$*"
. Tak więc biegnieszsh -c "/bin/bash -c echo <(cat)"
;echo
samo polecenie jest tylko przekazywane argumentu-c
, i<(cat)
jest całkowicie oddzielny argumentem.Jakiś czas temu miałem do czynienia z podobną sytuacją, w której musiałem używać koprocesora ksh dla sqlplus i miałem tylko ssh, przez który muszą odbywać się odczyty i zapisy.
Sposobem na to jest umieszczenie wszystkich poleceń zależnych w jednej linii (użyj;) do / usr / bin / ksh na zdalnej maszynie. na przykład:
źródło