여러 암호 프롬프트 없이 sudo로 스크립트를 실행하려면 사용자를 재인증하세요.

여러 암호 프롬프트 없이 sudo로 스크립트를 실행하려면 사용자를 재인증하세요.

OpenVPN 구성에 자동으로 로그인하는 스크립트를 작성하려고 합니다. 다음과 같이 싱글 로그인을 성공적으로 자동화했습니다.

#!/bin/bash
cd filepath/
username= "username"
password= "password"
read -sp "Enter Sudo Password: " sudopassword

/usr/bin/expect << EOF

spawn sudo openvpn config-file.ovpn
expect "password for $USER: "
send "$sudopassword\r"
expect "Enter Auth Username: "
send "$username\r"
expect "Enter Auth Password: "
send "$password\r"
expect "$ "

EOF

단일 쉘 스크립트로 저장했습니다. 그런 다음 그냥 실행합니다.

./killvpn

별도의 .sh 파일에서 이전 VPN 연결이 종료되었는지 확인하세요.

#!/bin/bash
sudo pkill vpn

지금까지 내 스크립트는 별도의 디렉터리에서 시작하고 다음 스크립트를 호출하여 다음과 같은 작업을 수행합니다.

## Project Folder is called: VPN ##
## Filepath: VPN/                ##

#!/bin/bash
./login1.sh
sleep 30m
./killvpn
echo " "
echo "Logging in to VPN2"
echo " "
./login2.sh
sleep 30m           

등. 내 ./login2.sh 파일은 ./login1.sh와 동일하지만 다음 부분을 제거했습니다.

read -sp "Enter Sudo Password: " sudopassword

그리고:

expect "password for $USER: "
send "$sudopassword\r"

그러나 ./login2.sh는 기본 스크립트가 준비되고 루트 권한이 부여되었음에도 불구하고 시작 시 여전히 sudo 비밀번호를 묻는 메시지를 표시합니다. 열려 있는 터미널에서 모니터링하지 않으면 VPN 연결이 닫히기 때문에 스크립트를 사용할 수 없게 됩니다.

누군가 이 코드를 검토하고 sudo 프롬프트 없이 ./login2.sh를 실행하는 방법을 알려주고 어디가 잘못되었는지 판단하는 데 도움을 줄 수 있습니까?

답변1

sudo를 사용할 때(스크립트를 변경하지 않고) 비밀번호 요구 사항을 제거하는 가장 쉬운 방법은 /etc/sudoers에서 "nopasswd"를 사용하여 사용자 권한을 정의하는 것입니다.

myuser    ALL=(ALL:ALL) NOPASSWD:ALL

이렇게 하면 사용자 "myuser"가 비밀번호를 묻는 메시지 없이 루트로 모든 명령을 실행할 수 있습니다.

(sudoers 파일을 직접 편집하는 대신 "visudo" 명령을 사용하여 변경하는 것을 잊지 마세요.)

답변2

sudo ./yourScript.sh를 실행하고 sudo 비밀번호를 입력하라는 메시지가 표시되지 않는 것이 더 쉽지 않을까요?

관련 정보