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 비밀번호를 입력하라는 메시지가 표시되지 않는 것이 더 쉽지 않을까요?