맥북과 맥미니에서 모두 성공하긴 했지만, 실패가 너무 많았다. 코드를 몇번이나 바꿔도, 솔직히 이게 다음에 또 하려고 하면 기억이 잘 나지 않을 것 같아서 불안하긴 하다. 그래도, 원리를 생각해보자면 다음과 같다. - 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`에서 확인할 수 있습니다. ---