![쉘 스크립트를 통해 3개의 OpenVPN 연결 연결](https://linux55.com/image/46823/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%ED%86%B5%ED%95%B4%203%EA%B0%9C%EC%9D%98%20OpenVPN%20%EC%97%B0%EA%B2%B0%20%EC%97%B0%EA%B2%B0.png)
업무상 매일 3개의 다른 OpenVPN 연결에 연결해야 합니다. 작업 속도를 높이기 위해 쉘 스크립트를 사용하고 있지만 더 잘할 수 있을 것 같습니다.
현재 내 스크립트는 다음과 같습니다
#!/bin/bash
cd ~/vpns
sudo openssl aes-128-cbc -d < login.conf.aes > login.conf
cd ~/vpns/live_vpn
(sudo openvpn --config config.ovpn --auth-user-pass ~/vpns/login.conf) &
cd ~/vpns/mgmt_vpn
(sudo openvpn --config config.ovpn --auth-user-pass ~/vpns/login.conf) &
cd ~/vpns/test_vpn
(sudo openvpn --config config.ovpn --auth-user-pass ~/vpns/login.conf) &
cd ~/vpns
sleep 20
wipe -f login.conf
Openssl은 연결에 대한 사용자 이름과 비밀번호가 포함된 파일을 해독한 다음 연결이 설정된 후 삭제합니다.
이것은 작동하지만 몇 가지 문제가 있습니다.
- 반복되는
cd
s는 보기에 좋지 않습니다. sleep
연결이 설정되자마자 삭제가 발생하도록 명령(해독된 로그인 파일을 사용할 openvpn 시간을 제공하는)을 대체할 수 있었으면 좋겠습니다 .- openvpn 라인 위에서 호출을 했습니다
sudo
. 그렇지 않으면 쉘에 "스택"된 것처럼 보이고 비밀번호를 입력할 기회가 없습니다.
내 질문은: 이것을 달성하는 더 좋은 방법은 무엇입니까?
답변1
사용자 이름/비밀번호 조합을 변수에 저장하는 것이 작동하는지 100% 확신할 수 없습니다. sudo 구성에 비밀번호가 필요한 경우 확실히 작동하지 않지만 최소한 아래와 유사한 루프를 구현할 수 있습니다. 사용자 이름/비밀번호를 변수에 저장하는 것이 실제로 작동한다면 자격 증명을 사용하여 파일을 작성할 필요가 전혀 없습니다.
#!/bin/bash
VPNDIR=${HOME}/vpns
CONFIG=${VPNDIR}/login.conf
OCWD=${PWD}
cd ${VPNDIR}
OLDIFS=${IFS} ; IFS=''
CREDS="$(openssl aes-128-cbc -d < login.conf.aes)"
IFS=${OLDIFS}
for Z in live_vpn mgmt_vpn test_vpn; do
cd ${VPNDIR}/${Z}
(printf "${CREDS}\n" | sudo openvpn --config config.ovpn --auth-user-pass) &
done
unset CREDS
cd ${OCWD}