“apt-get install”을 실행할 때 SSH 세션이 닫히지 않습니다 위해 SSH를

문제

실행할 때 apt-get install비 대화식 SSH 세션에서, 세션이 종료되지 않습니다. 예:

ssh user@target "sudo apt-get -y install my_package"

my_package제대로 설치되지만 SSH 세션이 끊어집니다.

질문

apt-get작업 을 위해 SSH를 전달하는 플래그가 있습니까?


추가 정보

문맥

원격 설치는 통합 서버에 패키지를 자동으로 배포하는 데 사용됩니다. 코드 변경 사항을 리포지토리에 푸시하자마자 작업이 코드를 가져 와서 패키지를 빌드 한 다음 통합에 배포하여 모든 것이 제대로 작동하는지 확인합니다 (배포와 관련하여).

이미 시도 및 메모

  • 동일한 SSH 세션 실행이 apt-get update깨끗하게 닫힙니다. 참고 apt-get update상호 작용하지 않습니다가, 반면 apt-get install입니다. 이는 대화 형 작업이 문제임을 암시 할 수 있습니다.
  • 같은 명령은에 ssh user@target "sudo apt-get install my_package && echo Hello"도달하지 않습니다 echo.
  • debconf 멋진 프론트 엔드 (디스플레이, Readline)를 찾을 수없고 Teletype으로 넘어갑니다 (Readline이 사용 가능하더라도).
  • debconf의 프론트 엔드 -t와 관련하여 SSH 를 사용 하여 TTY를 강제로 전달해도 도움이되지 않습니다. 둘 다 DEBIAN_FRONTEND=noninteractive.
  • 모든 것은 Ubuntu 12_04 LTS에서 수행되었습니다.


답변

SF에 대한 다음 답변이 트릭을 수행했습니다.

cron bash 스크립트에서 실행할 때 ssh가 원격 명령을 실행하지 못함

-t플래그는 TTY가 로컬에없는 경우를 제외하고 의사 -tty 할당을 강제합니다. 그러나 깃발을 두 번 지나가는 -t -t것처럼 흉내냅니다. 그리고 그것은 문제를 해결했습니다.

SSH 설명서를 참조하십시오.

-t 의사 tty 할당을 강제합니다. 이는 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며, 예를 들어 메뉴 서비스를 구현할 때 매우 유용합니다. ssh에 로컬 tty가 없더라도 다중 -t 옵션은 tty 할당을 강제합니다.

자, 왜 그 일이 일어 났습니까? debconf로그의 프론트 엔드에 대해 더 이상 불평하지 않는 것으로 나타났습니다 . 그래서 필요에 따라 이중 -t세트 (루어?) 가 SSH 세션을 완전히 종료 debconf할 수 있다고 생각합니다 apt-get install.


답변

내가 살펴봤을 때, 이것은 일을 할 수 있습니다. 종료 및 heredoc 뒤에 오는 명령을 호출하십시오. 해결책을 찾았지만 개인적으로는 시도하지 않았습니다.

ssh user@myremotemachine <<-EOF
free -m
exit
EOF

원래 답변은 다음과 같습니다. http://www.thetechrepo.com/main-articles/529-execute-a-command-remotely-over-ssh-and-then-close-the-connection


답변

debian / jessie에서 나는이 명령에 성공했습니다 :

ssh user@host "TERM=READLINE sudo apt-get install --reinstall less && echo done"

그러나 아마도 당신은 이것과 다른 다가오는 작업에 ansible을 사용하는 것을 고려해야합니다 http://docs.ansible.com/ansible/apt_module.html