답변:
답변 아래와 같이 새로운 맥 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
}
vpn-connect && git fetch && vpn-disconnect
입니다. 이 방법이 있다고 생각하십니까?
vpn-connect
그것은 던져 않습니다 syntax error: Expected end of line but found identifier. (-2741)
하지만 애플 스크립트 편집기를 사용하여 응용 프로그램으로 변환 호출 한 후 open vpn-connect.app
그것을 작동합니다. 그러나 해당 사용자의 활성 GUI 세션이 없으면 LSOpenURLsWithRole() failed with error -10810
SSH를 통해 호출 할 때 a 가 발생합니다.
또한 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
각주 :
--user
아닙니다--username
scutil --nc stop Foo
요세미티에서 작동하지 않는 아이디어 가 있습니까?
Lion에서 이것을 테스트하지는 않았지만 Mountain Lion에서 아무런 문제없이 다음 명령을 사용하고 있습니다.
networksetup -connectpppoeservice UniVPN
scutil
그렇지 않습니다!
scutil
저장된 데이터를 가져 가지 않으므로 완벽하게 작동합니다 . 이는 고통입니다.
나는 방금 황금빛 신인 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
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을 테스트하지 않았습니다