ฉันมีการกำหนดค่า VPN สองแบบบน mac ของฉันและฉันต้องการที่จะสามารถเริ่มต้นได้จากคอนโซลเมื่อฉันเข้าสู่เครื่องของฉัน
ฉันพบคำสั่งnetworksetup
ที่อนุญาตให้ฉันกำหนดค่าการเชื่อมต่อ แต่เท่าที่ฉันสามารถบอกได้ว่าไม่ได้เริ่มต้นจริงๆ
ใช้สิงโต
ฉันมีการกำหนดค่า VPN สองแบบบน mac ของฉันและฉันต้องการที่จะสามารถเริ่มต้นได้จากคอนโซลเมื่อฉันเข้าสู่เครื่องของฉัน
ฉันพบคำสั่งnetworksetup
ที่อนุญาตให้ฉันกำหนดค่าการเชื่อมต่อ แต่เท่าที่ฉันสามารถบอกได้ว่าไม่ได้เริ่มต้นจริงๆ
ใช้สิงโต
คำตอบ:
สำหรับ MacOS เวอร์ชั่นที่ใหม่กว่านั้นสามารถใช้คำสั่งง่าย ๆ ดังที่แสดงในคำตอบด้านล่างเช่นอันนี้ (ให้ +1!)
สิ่งที่คุณต้องการคือ:
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)
แต่หลังจากแปลงเป็นแอปพลิเคชันด้วยตัวแก้ไข AppleScript และเรียกopen vpn-connect.app
มันทำงาน อย่างไรก็ตามหากไม่มีเซสชัน GUI ที่ใช้งานของผู้ใช้LSOpenURLsWithRole() failed with error -10810
นั้นจะถูกโยนทิ้งเมื่อเรียกใช้ผ่าน SSH
คุณสามารถใช้คำสั่ง scutil อย่างน้อย Lion 1ได้
ตัวอย่างเช่นถ้าฉันมีบริการ VPN ชื่อ "Foo" ฉันสามารถเชื่อมต่อผ่าน:
$ scutil --nc start Foo
ฉันสามารถเลือกระบุผู้ใช้รหัสผ่านและข้อมูลลับโดยใช้แฟล็กของชื่อเดียวกัน:
$ scutil --nc start Foo --user bar --password baz --secret quux
สามารถตัดการเชื่อมต่อบริการผ่าน:
$ scutil --nc stop Foo
สำหรับความช่วยเหลือเพิ่มเติมโดยละเอียดคุณสามารถดูman pageหรือเรียกใช้:
$ 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 (ซึ่งเห็นได้ชัดว่าเป็นพระเจ้าสีทอง) เพื่อสร้างสคริปต์ ruby ดีที่สามารถใช้กับทุกสิ่ง
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
คุณสามารถใช้networksetup -connectpppoeservice "myvpn"
เพื่อเชื่อมต่อกับ VPN ชื่อ myvpn และใช้networksetup -disconnectpppoeservice "myvpn"
เพื่อตัดการเชื่อมต่อจาก VPN ชื่อ myvpn
ก่อนที่จะใช้บรรทัดคำสั่งเหล่านี้คุณจะต้องกำหนดการเชื่อมต่อด้วยตนเองในการตั้งค่าระบบ> เครือข่าย
ทำงานบน MacOS 10.14.5 Mojave:
เชื่อมต่อ VPN : ใช้คำตอบของ @ slhck -> networksetup -connectpppoeservice "VPN Name"
ตัดการเชื่อมต่อ VPN : จากคำตอบของ @ encoded -> scutil --nc stop "VPN Name"
สิ่งนี้ใช้ได้กับ L2TP ของฉันผ่าน IPSEC VPN ฉันไม่ได้ทดสอบ Cisco IPSEC หรือ IKEv2 VPN