Yapılandırılmış VPN'yi komut satırından başlat (OSX)


Yanıtlar:


41

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_profileveya ~/.profilene kullanıyorsanız).

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.

görüntü tanımını buraya girin

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-connectve vpn-disconnectsı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
}

Boulder_ruby'nin kodunda olduğu gibi backticks koyarak bu tür bir çalışma var. Ancak ideal olarak geri dönmeden önce bir geri arama için beklerdi. Amacım kaçmak vpn-connect && git fetch && vpn-disconnect. Bunu yapmanın bir yolu olduğunu düşünüyor musunuz?
Michael Forrest,

İyi bir fikir. Senaryomu güncelledim… sadece test ettim ve çalışıyor gibi görünüyor.
slhck

1
Bu açık olabilir, ancak sadece kayıt için: Görünüşe göre bunun çalışması için açık bir GUI oturumuna ihtiyacınız var. Bu makinede aktif olan aynı kullanıcının bir GUI oturumu varken SSH aracılığıyla oturum açtığımda ve vpn-connectonu ç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.appsonra çalışır. Ancak, bu kullanıcının aktif bir GUI oturumu yoksa, a LSOpenURLsWithRole() failed with error -10810SSH ile çağrılırken atılır.
Stefan Schmidt

56

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

Güncelleme

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:

  1. Bu komutun ne zaman OSX’e eklendiği belli değil, Mavericks’te kullandım ve Eric B. kullanıcısı Lion’da çalıştığını bildirdi (10.7.5).

Bunu Lion'da (10.7.5) denedim ve harika çalışıyor. Sadece man sayfalarında belgelenmemiş. Teşekkürler!
Eric B.

Scutil'in geri dönmeden önce bağlantı tamamlanıncaya kadar beklemesini bekleyen herhangi bir bekleme var mı? Bağlantı kurulduktan sonra bir komut dosyasını çalıştırmam gerekiyor, ancak scutil çok hızlı bir şekilde geri dönüyor ve bağlantı kurulmadan önce aşağıdaki komut çalıştırılıyor.
Eric B.

@EricB. Hızlı bir komut dosyası için güncellemelerime bakın.
kodlandı

Kullanıcı adı seçeneği --userdeğil, olmalı--username
Rockallite

2
Neden scutil --nc stop Fooişe yaramadığı hakkında bir fikriniz var mı (Yosemite'da)?
saat

26

Bunu Lion altında test etmedim ancak Mountain Lion altında aşağıdaki komutu herhangi bir sorun olmadan kullanıyorum:

networksetup -connectpppoeservice UniVPN

Bu işe yaramalı bu yardımcı program '02 de eklendi.
El Developer

2
Evet, şaşırtıcı bir şekilde, bu yaklaşım, anahtar VPN hizmetleri için değil, PPPoE hizmetleri için olsa da işe yarıyor, ancak bağlantıyı kesmek bu şekilde çalışmıyor.
Stefan Schmidt

Bu L2TP ile saklanan paylaşılan gizli, çalışır scutil!
Konstantin Suvorov

Bu mükemmel bir şekilde çalışır, çünkü scutilkaydedilmiş verilerin hiçbirini almaz, bu bir acıdır.
Matt Fletcher

OS X 10.13.5'te benim için çalıştı!
Kullanıcı7391

0

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

0

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.


0

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.