"sudo: 죄송합니다. 원격 스크립트에서 sudo를 사용할 때 sudo를 실행하려면 tty가 있어야 합니다."

"sudo: 죄송합니다. 원격 스크립트에서 sudo를 사용할 때 sudo를 실행하려면 tty가 있어야 합니다."

내장된 스크립트를 통해 원격 컴퓨터에서 일련의 sudo 승격 명령을 실행하고 싶습니다. 문제를 단순화하기 위해 방금 sudo id를 실행해 보았고 그것이 루트라는 것을 알려주었습니다.

이 스크립트를 실행하면 "sudo: 죄송합니다. sudo를 실행하려면 tty가 있어야 합니다."라는 메시지가 나타납니다.

#!/bin/bash
ssh -t 192.168.1.100<<EOF
sudo id
EOF

하지만 이것을 실행하면 다음과 같은 일이 발생하지 않습니다.

#!/bin/bash
ssh -t 192.168.1.100 sudo id

포함된 스크립트의 파일 끝이 SSH의 다른 쪽 끝에 강제 tty를 지정하는 첫 번째 것을 어떻게 얻습니까?

답변1

첫 번째 파일 은 터미널에 연결되어 있지 않기 때문에 ttyfor 가 없으며 여기에 있는 파일입니다. 실제로 Debian에서 비슷한 명령을 실행하려고 하면 다음 오류가 발생합니다.sshstdin

stdin이 터미널이 아니기 때문에 의사 터미널은 할당되지 않습니다.

작동하게 하려면 다음을 수행할 수 있습니다.

ssh -tt 192.168.1.100 <<EOF
sudo -S id
password
EOF

비밀번호가 일반 텍스트로 되어 있으므로 이는 좋은 생각이 아닙니다.

고쳐 쓰다

비밀번호를 일반 텍스트로 인코딩하지 않는 간단한 해결책을 찾았습니다. 그래픽 프로그램을 사용하여 비밀번호를 입력할 수 있습니다.

ssh -X 192.168.1.100 <<EOF
SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A id
EOF

물론 해당 ssh-askpass프로그램은 지정된 위치에 설치되어 있어야 하며, 사용 중인 컴퓨터에서 X 세션이 실행되고 있어야 합니다. 이 프로그램에는 ssh-askpass작동해야 하는 몇 가지 변형이 있습니다 (Gnome/KDE 버전). 또는 또는 같은 그래픽 교체 프로그램이 sudo작업을 수행해야 합니다.gksukdesudo

관련 정보