명령 줄 (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.