%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%A9%EB%8B%88%EB%8B%A4..png)
로컬 컴퓨터에서 원격 시스템에 대한 명령 실행
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