명령 줄 (OSX)에서 구성된 VPN 시작


답변:


41

답변 아래와 같이 새로운 맥 OS 버전의 경우, 매우 간단한 명령은 예를 들어, 사용할 수 있습니다 이것 (그것에게 일을 줘!).

필요한 것은 다음과 같습니다.

 networksetup -connectpppoeservice "UniVPN"

유일한 문제는이 명령을 사용하여 연결을 끊을 수 없다는 것입니다.


AppleScript를 사용하여 선택한 VPN 서비스에 연결할 수도 있습니다. 일단로드되면 명령 행에서 사용 가능한 쉘 기능을 사용합니다.

아래에 기능을 추가하십시오 ( ~/.bash_profile또는 ~/.profile사용하는 방식).

네트워크 환경 설정 아래에 표시된대로 VPN 연결 자체의 이름 만 변경하면됩니다 . 대학 VPN을 여기에서 사용했습니다.

여기에 이미지 설명을 입력하십시오

다른 기능에 대해 원하는 경우 기능 이름도 변경할 수 있습니다. 인수를 사용하여 이것을 줄일 수는 있지만 이런 식으로 잘 작동합니다. Snow Leopard에서 테스트했지만 Leopard와 Lion도 작동합니다.

당신이 기능을 추가 한 후에 터미널을 다시로드와 함께 그들에게 전화 vpn-connect하고 vpn-disconnect각각.


function vpn-connect {
/usr/bin/env osascript <<-EOF
tell application "System Events"
        tell current location of network preferences
                set VPN to service "UniVPN" -- your VPN name here
                if exists VPN then connect VPN
                repeat while (current configuration of VPN is not connected)
                    delay 1
                end repeat
        end tell
end tell
EOF
}

function vpn-disconnect {
/usr/bin/env osascript <<-EOF
tell application "System Events"
        tell current location of network preferences
                set VPN to service "UniVPN" -- your VPN name here
                if exists VPN then disconnect VPN
        end tell
end tell
return
EOF
}

boulder_ruby의 코드와 같이 백틱을 넣어서 이런 종류의 작업을 수행했습니다. 그러나 이상적으로는 반환하기 전에 콜백을 기다립니다. 내 목표는 달리는 것 vpn-connect && git fetch && vpn-disconnect입니다. 이 방법이 있다고 생각하십니까?
— Michael Forrest

좋은 생각. 스크립트를 업데이트했습니다… 그냥 테스트했는데 작동하는 것 같습니다.
— slhck

1
이것은 명백하지만 기록 일뿐입니다. 실제로 작동하려면 GUI 세션이 필요합니다. 나는 그 기계에서 활성화 동일한 사용자의 GUI 세션이있는 동안 SSH를 통해 로그인하고 호출 할 때 vpn-connect그것은 던져 않습니다 syntax error: Expected end of line but found identifier. (-2741)하지만 애플 스크립트 편집기를 사용하여 응용 프로그램으로 변환 호출 한 후 open vpn-connect.app그것을 작동합니다. 그러나 해당 사용자의 활성 GUI 세션이 없으면 LSOpenURLsWithRole() failed with error -10810SSH를 통해 호출 할 때 a 가 발생합니다.
— Stefan Schmidt

56

또한 Lion 1 이상 에서 scutil 명령을 사용할 수도 있습니다.

예를 들어, "Foo"라는 VPN 서비스가있는 경우 다음을 통해 연결할 수 있습니다.

$ scutil --nc start Foo

선택적으로 동일한 이름의 플래그를 사용하여 사용자, 비밀번호 및 비밀을 지정할 수 있습니다.

$ scutil --nc start Foo --user bar --password baz --secret quux

다음을 통해 서비스 연결을 끊을 수 있습니다.

$ scutil --nc stop Foo

보다 자세한 도움말을 보려면 man 페이지 를 보거나 다음을 실행하십시오.

$ scutil --nc help

최신 정보

Eric B의 의견에 대한 응답으로 연결이 설정 될 때까지 폴링 할 빠른 스크립트 추가

#!/bin/bash

# Call with <script> "<VPN Connection Name>"

set -e
#set -x

vpn="$1"

function isnt_connected () {
    scutil --nc status "$vpn" | sed -n 1p | grep -qv Connected
}

function poll_until_connected () {
    let loops=0 || true
    let max_loops=200 # 200 * 0.1 is 20 seconds. Bash doesn't support floats

    while isnt_connected "$vpn"; do
        sleep 0.1 # can't use a variable here, bash doesn't have floats
        let loops=$loops+1
        [ $loops -gt $max_loops ] && break
    done

    [ $loops -le $max_loops ]
}

scutil --nc start "$vpn"

if poll_until_connected "$vpn"; then
    echo "Connected to $vpn!"
    exit 0
else
    echo "I'm too impatient!"
    scutil --nc stop "$vpn"
    exit 1
fi

각주 :

  1. 이 명령이 OSX에 언제 추가되었는지는 확실하지 않으며 Mavericks에 있으며 사용자 Eric B.는 Lion (10.7.5)에서 작동한다고보고합니다.

Lion (10.7.5)에서 이것을 시도해 보았습니다. 매뉴얼 페이지에 문서화되어 있지 않습니다. 감사!
— Eric B.

연결이 완료 될 때까지 scutil이 기다릴 때까지 기다렸다가 다시 오지 않습니까? 연결이 설정되면 스크립트를 실행해야하지만 scutil이 너무 빨리 반환되고 연결이 설정되기 전에 다음 명령이 실행됩니다.
— Eric B.

@EricB. 빠른 스크립트에 대한 내 업데이트를 참조하십시오.
— 인코딩 된

사용자 이름 옵션은 --user아닙니다--username
— Rockallite

2
왜 scutil --nc stop Foo요세미티에서 작동하지 않는 아이디어 가 있습니까?
— fdot

26

Lion에서 이것을 테스트하지는 않았지만 Mountain Lion에서 아무런 문제없이 다음 명령을 사용하고 있습니다.

networksetup -connectpppoeservice UniVPN

이 유틸리티는 '02 년에 다시 추가되었습니다.
— 엘 개발자

2
예, 놀랍게도이 방법은 스위치가 VPN 서비스가 아니라 PPPoE 서비스를위한 것이지만 작동하지만 연결 끊기는이 방식으로 작동하지 않습니다.
— 스테판 슈미트

이것은 L2TP 저장된 공유 비밀과 함께 작동하지만 scutil그렇지 않습니다!
— 콘스탄틴 수보 로프

scutil저장된 데이터를 가져 가지 않으므로 완벽하게 작동합니다 . 이는 고통입니다.
— 매트 플레처

OS X 10.13.5에서 나를 위해 일했습니다!
— 7391

0

나는 방금 황금빛 신인 slhck의 위 스크립트를 사용하여 모든 종류의 것들에 사용할 수있는 멋진 루비 스크립트를 만들었습니다.

class SwitchIp

def go
  turn_off
  sleep 3
  turn_on
end

def turn_on
  `/usr/bin/env osascript <<-EOF
      tell application "System Events"
        tell current location of network preferences
            set VPN to service "StrongVPN" -- your VPN name here
            if exists VPN then connect VPN
      end tell
    end tell
  EOF` 
end

def turn_off
  `/usr/bin/env osascript <<-EOF
    tell application "System Events"
      tell current location of network preferences
            set VPN to service "StrongVPN" -- your VPN name here
            if exists VPN then disconnect VPN
      end tell
  end tell
 EOF`
end

end

0

당신이 사용할 수있는 networksetup -connectpppoeservice "myvpn"VPN을 이름 myvpn에 연결하고 사용하는 networksetup -disconnectpppoeservice "myvpn"VPN을 이름 myvpn에서 분리에

이 명령 행을 사용하기 전에 시스템 환경 설정> 네트워크에서 연결을 수동으로 구성해야합니다.


0

MacOS 10.14.5 Mojave에서 작동합니다 :

VPN 연결 : @slhck의 답변 사용 -> networksetup -connectpppoeservice "VPN Name"

VPN 연결 끊기 : @encoded의 답변에서 -> scutil --nc stop "VPN Name"

이것은 내 L2TP over IPSEC VPN에서 작동했습니다. Cisco IPSEC 또는 IKEv2 VPN을 테스트하지 않았습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.