답변:
간단한 방법은 다음을 지정하는 것입니다 -t
.
ssh -t remotehost "sudo ./binary"
매뉴얼 페이지에서 :
의사 -tty 할당을 강제합니다. 이는 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며, 예를 들어 메뉴 서비스를 구현할 때 매우 유용합니다. ssh에 로컬 tty가 없더라도 다중 -t 옵션은 tty 할당을 강제합니다.
이것이 왜 효과가 있는지 정확하게 설명 할 수 없으며 더 좋은 방법이있을 수 있습니다. 나는 그렇다면 그것에 대해 듣고 싶습니다 :)
@psusi는 이것이 왜 아래 주석에서 작동하는지 설명합니다.
sudo
tty가 암호를 묻는 프롬프트를 요구 하기 때문에 작동 하며, 실행할 명령을 지정할 때 ssh
일반적으로 바이너리 데이터를 전송할 수있는 비 대화 형 명령을 실행하는 데 사용되므로 기본적으로 하나를 할당하지 않으므로 tty를 트립 할 수 있습니다 .
이 문제를 어떻게 해결할 수 있습니까?
sudo: no tty present and no askpass program specified
대안으로 다음을 시도하십시오.
sudo -S ./binary
이것은 sudo가 표준 입력 stdin에서 암호를 읽도록 지시합니다.
chroot 환경에서 이러한 다른 답변은 올바르게 작동하지 않을 수 있습니다.
예를 들어 : chroot 환경 (예 : Archlinux 및 arch-chroot)을 사용하여 Linux 또는 부트 로더를 수동으로 설치 / 수리합니다.
비밀번호를 읽을 터미널 / 응용 프로그램을 정의해야합니다. 두 가지 변형이 있습니다.
export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
vim /etc/sudoers
(기본적으로 보이는 비밀번호)visudo
대신 사용 하는 것이 좋지 vim /etc/sudoers
않습니까?
sudo
루트 암호를 묻는 메시지가 표시되고 의사 tty가 할당되지 않아 실패합니다 .
루트로 로그인하거나 /etc/sudoers
(또는 :)에 다음 규칙을 설정해야합니다 sudo visudo
.
# Members of the admin group may gain root privileges
%admin ALL=(ALL) NOPASSWD:ALL
그런 다음 사용자가 admin
그룹 (또는 wheel
)에 속하는지 확인하십시오 .