ssh를 사용할 때 프론트 엔드 : 대화 상자를 초기화 할 수 없습니다


52

테스트 환경에서 ssh를 통해 다음 명령을 루트로 실행하고 있습니다.

ssh <remote_srv> "apt-get autoremove"

내 sshd_config에 "비밀번호가없는 PermitRootLogin"이 있고 root의 id_rsa.pub를 원격 서버의 authorized_keys 파일에 추가했습니다.

그럼에도 불구하고 다음과 같은 오류가 발생합니다.

debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype

나는 이것을 ssh 맨 페이지에서 찾아 보았지만 의사 용어와 ttys에 대한 설명을 내 마음에 감쌀 수 없었다.

위의 오류를 설명 할 수있는 사람이 있습니까? 옵션이 누락 된 것 같지만 어느 것입니까?

두 플랫폼 모두 Ubuntu 14.04 LTS입니다.

답변:


62

apt-get autoremove비 대화식 셸에서 실행되고 있다는 사실과 관련이 있다고 생각합니다 . docker 아래에 설치할 때 대화 상자 질문에 대답 할 수 있습니까?를 참조하십시오 .

해결책은 다음 명령을 접두어로 사용하는 것 DEBIAN_FRONTEND=noninteractive같습니다.

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"

12
사용할 때 발생 접두사를 추가, 고정 표시기 설치하는 동안 APT를-얻을, 좋은 작품
닐 맥길

의견 Neil에 감사드립니다. 나는 길을 잃은 것처럼 느꼈지만 도커 설치 중에 apt-get을 사용할 때 같은 문제가 발생했습니다.
Qcom

13

Alex의 솔루션은 오류를 억제하고 거의 원인을 알 수 있지만 질문에 대답 할 수는 없습니다 (답변을 미리 설정하고 스크립트에서 실행할 때 좋지만 새 패키지를 시도 할 때 실제로 성가시다) ). 핵심 문제는 ssh와 debconf의 다양한 프론트 엔드에 의해 만들어진 가정 간의 상호 작용입니다.

ssh로 시작하겠습니다. ssh는 원격 명령을 지정하지 않으면 원격 끝에서 pty를 원하고 원치 않는 원격을 지정한다고 가정합니다 (이것은 90 %가 아니라 잘 작동합니다). -tpty를 강제 실행하는 -T옵션 또는 pty 를 강제로 수행하지 않는 옵션 (또는 해당 구성 파일 옵션)으로 이를 대체 할 수 있습니다 . 또한 pty를 사용하는 경우 TERM환경 변수가 복사됩니다 (예외는 완료된 세부 사항 및 공식 경품 참가 양식에 대한 점검 문서를 적용 할 수 있음). 또한이 -x옵션은 X11 전달을 비활성화하고 -X활성화합니다.

Debconf 자체에는 (설계 상) 상호 작용 요구 사항이 없지만 다양한 프런트 엔드가 있으며 각 요구 사항이 다릅니다.

가장 잘 보이는 프론트 엔드는 그놈이라고 생각합니다 (내가 일하지 않은 ked 프론트 엔드도 있습니다). 그놈 프론트 엔드 (및 kde 서버도)에는 기본이 아닌 라이브러리와 X11 서버가 필요하므로 그놈 프론트 엔드를 강제 실행하는 명령 행 (적절한 라이브러리가 설치되면)

ssh -X <remote_srv> "DEBIAN_FRONTEND=gnome apt-get autoremove"

또는 kde를 선호한다면

ssh -X <remote_srv> "DEBIAN_FRONTEND=kde apt-get autoremove"

대화 상자 프론트 엔드 (기본값)에는 TERM 변수에 지정된 최소 레벨의 기능을 가진 pty 및 터미널이 필요합니다 (실제로 이것은 dumb를 제외한 완전한 terminfo 설명이있는 것임).

ssh -t <remote_srv> "TERM=$TERM DEBIAN_FRONTEND=dialog apt-get autoremove"

또는

ssh -t <remote_srv> "apt-get autoremove"

readline 프론트 엔드는 덜 엄격한 요구 사항을 가지고 있으며 벙어리 터미널에서 작동하지만 pty가 필요합니다.

ssh -t <remote_srv> "DEBIAN_FRONTEND=readline apt-get autoremove"

편집기 프론트 엔드는 편집기에 따라 특정 요구 사항이있는 편집기에 의존합니다.

ssh -t <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=vi apt-get autoremove"
ssh -X <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=gvim\ -f apt-get autoremove"

비 대화식 프론트 엔드에는 요구 사항이 없지만 질문을하지 않습니다 (원하는 것이거나 아닐 수도 있음).

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"

"리드 라인 프론트 엔드는 덜 엄격한 요구 사항을 가지고 있으며 벙어리 터미널에서 작동하지만 pty가 필요하다." pty를 어떻게 설정할 수 있습니까?
linuxatico

ssh -t자세한 내용 및 기타 옵션은 @linuxatico 에서 ssh 매뉴얼 페이지를 참조하십시오. 또한이 답변의 두 번째 단락을 다시 읽으십시오.
휴관
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.