맥북과 맥미니에서 모두 성공하긴 했지만, 실패가 너무 많았다. 코드를 몇번이나 바꿔도, 솔직히 이게 다음에 또 하려고 하면 기억이 잘 나지 않을 것 같아서 불안하긴 하다.
그래도, 원리를 생각해보자면 다음과 같다.
- vpn_auto_connect.sh
- 이 파일은 내가 시스템에서 설정한 VPN에 자동으로 접속이 가능하도록 해주는 스크립트다.
- 이 스크립트 파일을 실행하면 60초마다 접속 여부를 확인하고, 접속이 안 되어 있다면 다시 재접속을 시도한다.
- nano ~/Library/LaunchAgents/com.user.vpnautologin.plist
- 여기서 plist 스크립트는 부팅시 실행하도록 해주는 스크립트이다.
- 이 스크립트에서 위에서 만든 'vpn_auto_connect.sh'이 로그인 시 실행되도록 해주는 역할을 한다.
- 이 파일은 없기 때문에 생성해야 하고, 스크립트를 정확히 입력한 다음, 실행할 때 관리자 권한이 필요하다. 이 권한 문제 때문에도 헷갈렸다. 맥북은 이걸 활성화시킬 때, 지문 인식을 해야 해서 수동으로 그냥 설정 화면에서 토글을 켰다. 맥 미니는 됐는데 지웠다 다시 했다를 반복했다.
- 그 외에도,
- library 파일은 숨겨져 있다.
- 이 파일 안에 사용자 전역에서 시작 프로그램을 관리하는 LaunchAgents가 있고,
- 모든 사용자 전역에서 시작프로그램을 관리하는 LaunchDaemons가 있다는 것을 알았다.
- 런치 데몬을 건드리면 심각한 문제가 있을수도 있는데, 이 설정의 경우 LaunchAgents로 설정해서 이용하는 사용자 권한으로만 VPN에 접속하도록 하는 게 옳다.
여기까지의 개념을 잘 떠올리면서 이 코드를 나중에 또 사용해보자.
---
# 1. vpn 자동 실행 파일 생성
- vpn_auto_connect.sh 라는 파일명으로 생성한다.
- 이때, vpn=name을 내 vpn이름으로 정확히 입력하는 게 중요하다.
- 생성된 vpn_auto_connect.sh 파일의 경로를 잘 봐둬야 한다.
1. **Open Terminal** on your Mac.
2. **Create a new shell script** by typing:
```bash
nano vpn_auto_connect.sh
```
3. **Add the following code** in the script, assuming your VPN service name is set in your Mac network settings as “내가 설정한 vpn 이름”:
```bash
#!/bin/bash
# VPN service name as it appears in Network Preferences
# VPN_NAME을 정확히 입력하는 게 중요함. 아래에서 VPN_NAME을 변수로 받기 때문에 설정할 게 없음
VPN_NAME="jakenas"
# Check VPN connection status using networksetup
check_vpn() {
status=$(scutil --nc status "$VPN_NAME" | grep -o "Connected")
if [[ "$status" == "Connected" ]]; then
return 0 # VPN is connected
else
return 1 # VPN is disconnected
fi
}
# Connect VPN if not connected
# Networksetup으로 접속하는 방식이어야 설정이 됨. scutil --nc 이런 설정은 작동이 안 됐음
connect_vpn() {
networksetup -connectpppoeservice "$VPN_NAME"
echo "$(date): Attempting to connect to VPN..."
}
# Disconnect VPN
disconnect_vpn() {
networksetup -disconnectpppoeservice "$VPN_NAME"
}
# Main loop
while true; do
if ! check_vpn; then
echo "$(date): VPN disconnected. Attempting to reconnect..."
connect_vpn
else
echo "$(date): VPN is connected."
fi
# Check every minute
sleep 60
done
```
4. **Save and exit** by pressing CTRL+X, then Y, and Enter.
5. **Make the script executable**:
```bash
chmod +x vpn_auto_connect.sh
```
---
# 자동실행
- 권한 부여하고
- plist 파일을 생성해서 런치에이전트에서 작동하도록 해야함
-
맥북 부팅 시 자동으로 스크립트를 실행하기 위해서는 LaunchAgent를 생성하면 됩니다. 다음과 같은 단계로 진행하시면 됩니다:
1. 먼저 실행 권한을 스크립트에 부여합니다:
```bash
chmod +x /path/to/vpn_auto_connect.sh
```
2. LaunchAgent plist 파일을 생성해야 합니다. 다음 내용으로 `~/Library/LaunchAgents/com.user.vpnautologin.plist` 파일을 만듭니다:
---
LaunchAgent plist 파일을 생성하는 방법을 단계별로 알려드리겠습니다:
1. 터미널을 엽니다.
2. 텍스트 에디터로 파일을 생성합니다. nano를 사용하는 방법을 알려드리겠습니다:
```bash
nano ~/Library/LaunchAgents/com.user.vpnautologin.plist
```
3. 열린 에디터에 이전에 보여드린 plist 내용을 복사하여 붙여넣습니다.
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.vpnautologin</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/vpn_auto_connect.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/vpn_auto_connect.err</string>
<key>StandardOutPath</key>
<string>/tmp/vpn_auto_connect.out</string>
</dict>
</plist>
```
4. 파일 권한을 설정합니다:
```bash
chmod 644 ~/Library/LaunchAgents/com.user.vpnautologin.plist
```
주의사항:
- `/path/to/vpn_auto_connect.sh` 부분을 실제 스크립트가 있는 경로로 수정해야 합니다.
- 예를 들어, 스크립트가 홈 디렉토리의 Scripts 폴더에 있다면:
`/Users/사용자이름/Scripts/vpn_auto_connect.sh`와 같이 수정해야 합니다.
파일이 정상적으로 생성되었는지 확인하려면:
```bash
cat ~/Library/LaunchAgents/com.user.vpnautologin.plist
```
이 명령어로 파일 내용을 확인할 수 있습니다.
---
3. plist 파일에서 `/path/to/vpn_auto_connect.sh`를 실제 스크립트 경로로 수정해주세요.
4. LaunchAgent를 로드합니다:
```bash
launchctl load ~/Library/LaunchAgents/com.user.vpnautologin.plist
```
5. 정상적으로 작동하는지 확인:
```bash
launchctl list | grep vpnautologin
```
주요 설명:
- `RunAtLoad`: 시스템 시작 시 자동 실행
- `KeepAlive`: 프로세스가 종료되더라도 자동으로 재시작
- `StandardErrorPath`와 `StandardOutPath`: 로그 파일 경로
만약 스크립트를 중지하고 싶다면:
```bash
launchctl unload ~/Library/LaunchAgents/com.user.vpnautologin.plist
```
로그는 `/tmp/vpn_auto_connect.out`와 `/tmp/vpn_auto_connect.err`에서 확인할 수 있습니다.
---