로컬 컴퓨터에서 실행되는 bash 스크립트를 통해 원격 서버에서 (sudo 권한으로) 명령을 실행합니다.

로컬 컴퓨터에서 실행되는 bash 스크립트를 통해 원격 서버에서 (sudo 권한으로) 명령을 실행합니다.

로컬 컴퓨터에서 원격 시스템에 대한 명령 실행

SSH 연결을 통해 원격 lubuntu 22.04 시스템에서 명령을 실행해야 하지만 셸을 열지 않고 실행해야 합니다.이 명령은 스크립트 내에서 실행됩니다.스크립트는 내 로컬 시스템(다른 Ubuntu 배포판이 설치되어 있음)에서 실행됩니다. 나는 로컬 시스템에서 다음 스크립트를 실행하여 성공적으로 수행할 수 있음을 발견했습니다.

# define a variable which stored the password
MYPASSWORD='mypassword'

sshpass -p $MYPASSWORD ssh [email protected] "cp /home/myuser/file1 /path/to/dest/"

SSH 세션을 인증하는 데 필요한 sshpass사용자의 비밀번호 입력을 피하기 위해 로컬 시스템에 설치된 명령을 사용했습니다 .myuser

내 요구 사항

또한 이전과 같이 명령을 실행해야 cp하지만 파일 대상은 하위 폴더이므로 권한이 /etc필요합니다 sudo. 따라서 스크립트는 다음과 같습니다.

MYPASSWORD='mypassword'

sshpass -p $MYPASSWORD ssh [email protected] "cp /home/myuser/file1 /path/to/dest/"

sshpass -p $MYPASSWORD ssh [email protected] "sudo -S cp /home/myuser/file1 /etc/sub/folder/"

스크립트를 실행하면 스크립트의 마지막 명령이 다음 요청을 출력합니다.

[sudo] password for myuser:

따라서 스크립트는 실행을 중지하고 sudo비밀번호를 기다립니다.
나는 이것을 원하지 않는다!

나의 시도

명령을 실행하면:

> echo mypassword | sudo -S -s cp /home/myuser/file1 /etc/sub/folder/

곧장원격 시스템의 터미널에서비밀번호를 묻지 않고 작동하고 복사 file1합니다 ./etc/sub/folder/sudo

하지만 다음 명령을 실행하면내 로컬 시스템에서:

sshpass -p 'mypassword' ssh [email protected] "echo mypassword | sudo -S -s cp /home/myuser/file1 /etc/sub/folder/"

그것은 작동하지 않습니다!

내 질문

sudo키보드로 비밀번호 입력을 방지할 수 있는 방법이 있나요 ? 자동으로 비밀번호를 보낼 수 있나요?

답변1

해결 방법/솔루션을 찾았습니다.

비밀번호를 임시로 저장하는 파일을 사용하여sudo

아래에 표시된 몇 가지 명령을 추가하여 로컬 시스템에서 실행되는 스크립트를 수정했습니다.

  • 명령으로 원격 시스템의 폴더에 텍스트 파일을 생성합니다 echo. 파일이 호출되고 사용자의 password.txt비밀번호( )만 포함됩니다 ."mypassword"myuser
  • 파일은 운영자가 명령 password.txt에 직접 입력합니다 .sudo<
  • 명령의 실행sudo -S < /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/
  • 원격 시스템에서 /home/myuser/password.txt 파일 삭제

이 솔루션은 보안 개발 환경에서 사용되므로 보안 제약 조건을 위반하지 않습니다.

새로운 스크립트

이 지침을 사용하면 로컬 시스템에서 실행되는 스크립트는 다음과 같습니다.

MYPASSWORD='mypassword'

# creation of the file password.txt on the home folder of the remote system
sshpass -p $MYPASSWORD ssh [email protected] "echo $MYPASSWORD > /home/myuser/password.txt"

# execution of the command which needs the sudo privileges (on remote system)
sshpass -p $MYPASSWORD ssh [email protected] "sudo -S < /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/"
# The '<' directs file passowrd.txt as input to sudo   ===========================

# deletion of the file password.txt
sshpass -p $MYPASSWORD ssh [email protected] rm /home/myuser/password.txt

출력을 억제합니다.sudo -S

SSH에서 로컬 시스템으로 전송되는 [sudo] password for myuser:명령의 출력( )을 억제할 수 있는 다른 개선 사항을 발견했습니다 . 아래와 같이 연산자 와 장치를 사용하면 충분합니다 .sudo -S
&>/dev/null

sshpass -p $MYPASSWORD ssh [email protected] "sudo -S \
  < /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/" &> /dev/null

메모내 로컬 시스템에서 출력 억제는 [sudo] password for myuser:다음 리디렉션을 통해 작동합니다.

  • &>/dev/null
  • >&/dev/null

이전 연산자가 동일하기 때문에 이는 정상입니다(참조이 게시물슈퍼유저에서).

진압작동하지 않습니다다음 리디렉션을 통해:

  • >/dev/null

관련 정보