Docker의 CentOS에서 Python 코드를 사용하여 sudo 명령을 실행하는 방법

Docker의 CentOS에서 Python 코드를 사용하여 sudo 명령을 실행하는 방법

아래와 같이 Python에서 Docker 이미지 태그에 액세스하려고 합니다.

hostname = socket.gethostname()
cmd = "sudo curl --unix-socket /var/run/docker.sock http:/containers/" + hostname + "/json"
output = os.popen(cmd).read()

그러나 문제는 다음과 같은 오류가 발생한다는 것입니다.

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

sudo: no tty present and no askpass program specified

이것은 내가 StackOverflow에서 읽은 다른 게시물에서 Unix가 내보내는 이상한 메시지 중 하나입니다.

나는 다음 링크를 따라가고 있다

https://stackoverflow.com/questions/37439887/how-to-access-the-metadata-of-a-docker-container-from-a-script-running-inside-th

유일한 문제는 터미널이 아닌 Python에서 이 작업을 실행하고 싶다는 것입니다. 또한 참고로 터미널에서 동일한 명령을 실행하면 응답을 받습니다.

Dockerfile에 다음을 추가해 보았습니다.

RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

감사해요

답변1

sudo기본 구성은 requiretty표준 입력이 아닌 실제 미트백에 비밀번호 인증이 최대한 안정적으로 제공되도록 설정됩니다. NOPASSWD특정 항목에 대해 설정된 경우에도 sudoers확인됩니다 .

먼저, 이 작업을 수행해야 하는 이유를 자세히 살펴보는 것이 좋습니다 sudo curl. 일반적으로 이는 매우 현명하지 못한 일입니다. curl원격 호스트에서 무언가를 가져오기 위해 실행하기 위해 "루트"일 필요는 없습니다. curl권한이 없는 사용자로 실행하세요. 얻은 모든 작업을 수행하기 위해 슈퍼유저 액세스가 필요한 경우 별도로 수행하세요.

너무 많은 말을 해서requretty, 특정 항목이나 전체 구성을 비활성화할 수 sudoers있으며 TTY는 더 이상 필요하지 않습니다.

관련 정보