문제
실행할 때 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