Mac'imde iki VPN yapılandırması var ve makineme girdiğimde konsoldan başlatabilmek istiyorum.
networksetup
Bağlantıları yapılandırmama izin veren komutu buldum , ancak söyleyebildiğim kadarıyla aslında bir başlamıyor.
Aslan kullanmak.
Mac'imde iki VPN yapılandırması var ve makineme girdiğimde konsoldan başlatabilmek istiyorum.
networksetup
Bağlantıları yapılandırmama izin veren komutu buldum , ancak söyleyebildiğim kadarıyla aslında bir başlamıyor.
Aslan kullanmak.
Yanıtlar:
Daha yeni macOS sürümleri için, aşağıdaki cevaplarda gösterildiği gibi çok basit bir komut kullanılabilir, örneğin bu (bir + 1 ver!).
Tum ihtiyacin olan sey:
networksetup -connectpppoeservice "UniVPN"
Tek sorun bu komutu kullanarak bağlantınızı kesememenizdir.
Seçtiğiniz VPN servislerine bağlanmak için AppleScript'i de kullanabilirsiniz. Yüklendikten sonra komut satırından erişilebilen kabuk işlevlerini kullanacağız.
Aşağıdaki işlevleri kendinize ekleyin ( ~/.bash_profile
veya ~/.profile
ne kullanıyorsanız).
Ağ tercihleri altında göründüğü gibi VPN bağlantısının adını değiştirmeniz yeterlidir . Üniversite VPN'imi burada kullandım.
Farklı isimler için yapmak istiyorsanız, fonksiyonların isimlerini de değiştirebilirsiniz. Argümanları kullanarak bunu kısaltmak mümkün olabilir, ancak bu şekilde iyi çalışıyor. Snow Leopard'da test ettim (Leopard ve Lion da çalışmalı).
İşlevleri ekledikten sonra, terminali yeniden yükleyin vpn-connect
ve vpn-disconnect
sırasıyla ve ile çağırın .
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
. Bunu yapmanın bir yolu olduğunu düşünüyor musunuz?
vpn-connect
onu çağırdığınızda, bunu bir syntax error: Expected end of line but found identifier. (-2741)
AppleScript editörüyle bir Uygulamaya dönüştürüp çağırdıktan open vpn-connect.app
sonra çalışır. Ancak, bu kullanıcının aktif bir GUI oturumu yoksa, a LSOpenURLsWithRole() failed with error -10810
SSH ile çağrılırken atılır.
Ayrıca, en azından Aslan 1'den itibaren , scutil komutunu kullanabilirsiniz.
Örneğin, "Foo" adında bir VPN servisim varsa, aşağıdakilerle bağlantı kurabilirim:
$ scutil --nc start Foo
İsteğe bağlı olarak aynı isimlerin bayraklarını kullanarak bir kullanıcı, şifre ve sır belirtebilirim:
$ scutil --nc start Foo --user bar --password baz --secret quux
Hizmet şu yolla kesilebilir:
$ scutil --nc stop Foo
Daha ayrıntılı yardım için, man sayfasını görebilir veya çalıştırabilirsiniz:
$ scutil --nc help
Bağlantı kuruluncaya kadar yoklamak için hızlı bir komut dosyası ekleme (Eric B'nin yorumuna yanıt olarak
#!/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
Dipnotlar:
--user
değil, olmalı--username
scutil --nc stop Foo
işe yaramadığı hakkında bir fikriniz var mı (Yosemite'da)?
Bunu Lion altında test etmedim ancak Mountain Lion altında aşağıdaki komutu herhangi bir sorun olmadan kullanıyorum:
networksetup -connectpppoeservice UniVPN
scutil
!
scutil
kaydedilmiş verilerin hiçbirini almaz, bu bir acıdır.
Ben sadece her şey için kullanılabilecek bu şık yakut senaryoyu oluşturmak için slhck (açıkça bir altın tanrı olan) tarafından yukarıdaki senaryoyu kullandım.
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
Sen kullanabilirsiniz networksetup -connectpppoeservice "myvpn"
bir vpn adlı myvpn bağlanmak için, ve kullanımı networksetup -disconnectpppoeservice "myvpn"
vpn adlı myvpn gelen kesmek için
Bu komut satırlarını kullanmadan önce, Sistem Tercihleri> Ağ'da bir bağlantıyı manuel olarak yapılandırmanız gerekir.
MacOS 10.14.5 Mojave'da Çalışır:
VPN'i Bağlayın : @ slhck'ın cevabını kullanın -> networksetup -connectpppoeservice "VPN Name"
VPN bağlantısını kesin : @ @ kodlanmış yanıtından -> scutil --nc stop "VPN Name"
Bu, IPSEC VPN üzerindeki L2TP'mde çalıştı. Cisco IPSEC veya IKEv2 VPN'leri test etmedim