원격으로 스크립트를 실행하려면 sudo 비밀번호를 입력하세요.

원격으로 스크립트를 실행하려면 sudo 비밀번호를 입력하세요.

로컬 네트워크에서 가상 머신을 업그레이드하기 위한 스크립트를 개발하려고 합니다. 목표는 각 가상 머신이 스크립트를 다운로드한 다음 실행하도록 하는 것입니다.

컬을 사용하여 스크립트를 다운로드하고 실행할 수 있었지만 여전히 sudo 비밀번호를 묻는 메시지가 표시됩니다.

이것은 작동합니다:

sshpass -p 'password' ssh -t -t [email protected] 'curl -s 192.168.1.15/upgrade.sh | sudo sh'

하지만 sudo 명령에 도달하면 여전히 비밀번호를 다시 입력해야 합니다.

나는 이전에 시도했습니다:

sshpass -p 'password' ssh -t -t [email protected] 'curl -s 192.168.1.15/upgrade.sh | echo 'password' | sudo sh'

다음 프롬프트가 나타납니다:

[sudo] password for aaron: (23) Failed writing body

sudo 비밀번호 프롬프트에 비밀번호를 전달하려면 어떻게 해야 하나요?

답변1

기본적으로 여러 가지 옵션이 있으며 각 옵션에는 장단점이 있습니다. 이는 네트워크의 "기본" 정도와 솔루션의 내구성에 따라 다소 달라집니다.

  1. 비밀번호 없는 sudo. 사용자가 대상 시스템에서 비밀번호 없는 sudo를 사용할 수 있도록 허용합니다. 모든 것에 적용하거나( put "nameofuser ALL=(ALL) NOPASSWD: ALL대상 머신에서 사용됨 /etc/sudoers) 특정 명령만 허용하십시오. 대상 머신에 대한 액세스 권한이 있는 모든 사람 visudonameofuser실제로 해당 머신에 대한 루트 액세스 권한을 가집니다(@terdon이 주석에서 제안한 것처럼 머신의 모든 사람이 루트 액세스 권한을 갖는 것은 아닙니다).

  2. 제어 컴퓨터의 사용자가 대상 컴퓨터에 루트로 SSH를 통해 접속할 수 있도록 허용합니다. 제어하는 사용자의 공개 키를 authorized_keys대상 컴퓨터의 파일에 저장합니다. 이는 제어 시스템의 특정 사용자가 모든 가상 시스템에 대한 루트 액세스 권한을 가짐을 의미합니다.

  3. Ansible(또는 Puppet, Chef 등)을 살펴보세요. 그들은 당신을 위해 이 문제를 어느 정도 해결했습니다. Ansible은 학습 곡선이 완만한 편입니다(실제로는 하루 안에 사용할 수 있습니다).

문제가 오랫동안 지속되면 옵션 3을 선택하세요. 자체 로컬 네트워크로만 실험하는 경우 옵션 1 또는 옵션 2를 선택하세요.

관련 정보