Problem
Podczas pracy apt-get install
w nieinteraktywnej sesji SSH sesja nigdy się nie zamyka. Przykład:
ssh user@target "sudo apt-get -y install my_package"
Został my_package
poprawnie zainstalowany, ale sesja SSH po prostu zawisła.
Pytanie
Czy jest jakaś flaga, aby przekazać SSH, aby dostać się apt-get
do pracy?
Dodatkowe informacje
Kontekst
Instalacja zdalna służy do automatycznego wdrażania pakietu na serwerze integracyjnym. Jak tylko wprowadzimy pewne zmiany kodu do repozytorium, zadanie pobiera kod, buduje pakiet i wdraża go podczas integracji, aby sprawdzić, czy wszystko działa dobrze (jeśli chodzi o wdrożenie).
Już próbowałem i notatki
- Ta sama sesja SSH, która jest wykonywana, zostaje
apt-get update
zamknięta. Zauważ, żeapt-get update
nie jest interaktywny, podczas gdyapt-get install
jest. Może to sugerować, że interaktywność jest problemem. - Polecenie jak
ssh user@target "sudo apt-get install my_package && echo Hello"
nigdy nie dociera doecho
. debconf
narzeka, że nie może znaleźć ładnej nakładki (Display, Readline) i wraca do Teletype (chociaż Readline jest dostępny).- W odniesieniu do frontendu debconfa przejście
-t
do wymuszenia TTY z SSH nie pomaga. AniDEBIAN_FRONTEND=noninteractive
. - Wszystko zostało zrobione na Ubuntu 12_04 LTS.
ssh user@target
Wtedy polecenia z powłoki), czy działa ono poprawnie?Odpowiedzi:
Następująca odpowiedź na SF załatwiła sprawę:
ssh nie wykonuje polecenia zdalnego po uruchomieniu ze skryptu cron bash
Te
-t
siły flag przydział pseudo-tty, może z wyjątkiem, gdy nie ma TTY lokalnie. Ale dwukrotne przekazanie flagi jak-t -t
tylko udaje, że to robi. I to rozwiązało problem.Zobacz dokumentację SSH:
Dlaczego to zadziałało? Okazuje się, że
debconf
już nie narzeka na frontend w logach. Tak więc uważam, że podwójne-t
zestawy (przynęty?) Wdebconf
razie potrzeby, co pozwala naapt-get install
zakończenie, aby zakończyć sesję SSH czysto.źródło
Przeglądając to, może to zrobić. Wywołanie dowolnego polecenia powinno nastąpić po wyjściu i heredoc. Znalazłem rozwiązanie, ale nie wypróbowałem go osobiście.
Oryginalna odpowiedź pochodzi stąd: http://www.thetechrepo.com/main-articles/529-execute-a-command-remotely-over-ssh-and-then-close-the-connection
źródło
ssh user@host free -m
w moim docelowym środowisku i działa jak urok. Spróbuję następnie rekomendacji.W debian / jessie udało mi się wykonać to polecenie:
Ale może powinieneś rozważyć użycie ansible do tego i innych nadchodzących zadań http://docs.ansible.com/ansible/apt_module.html
źródło