"apt-get install"을 실행할 때 SSH 세션이 닫히지 않습니다


14

문제

실행할 때 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에서 수행되었습니다.

install 명령을 수동으로 실행하면 (즉 ssh user@target, 쉘의 명령) 제대로 작동합니까?
링 Ø

install 명령은 수동으로 수행하면 제대로 작동합니다 (따라서 비 로그인 / 대화식 세션 유형에 문제가 있다고 생각합니다).
Eric Platon

답변:


6

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

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

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

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

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

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


나는 이것이 좋은 대답이라고 생각하지만 즉시 그대로 표시하지는 않을 것입니다. 첫째, 나는 나 자신에게 대답했기 때문에 두 번째로 더 나은 / 더 일반적인 대답이있을 수 있습니다. 앞으로 이것에 다시.
Eric Platon

1

내가 살펴봤을 때, 이것은 일을 할 수 있습니다. 종료 및 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


감사합니다, koressak. 나는 이것이 쉘과 OS 배포판에 달려 있다고 생각한다. ssh user@host free -m대상 환경에서 방금 시도한 결과 매력처럼 작동합니다. 다음에 권장 사항을 시도해 보겠습니다.
Eric Platon

heredoc 접근 방식으로 완전히 실행했습니다. 문제가 해결되지 않았습니다. SSH 세션은 질문에 제시된 것과 같은 방식으로 중단됩니다. 응답과 포인터에 다시 한번 감사드립니다!
Eric Platon

1

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

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

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


흥미롭고 좋은 생각입니다. Ansible은 아마도 지금은 가능합니다. 언제 질문이 떠오른 지 모르겠습니다. 어쨌든, 나는 "내에서 무슨 일이 일어나고 있는지"를 아는 것이 좋다고 믿는다 (c).
Eric Platon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.