कमांड लाइन (OSX) से VPN को कॉन्फ़िगर करना शुरू करें


48

मेरे मैक पर दो वीपीएन कॉन्फ़िगरेशन हैं और मैं अपने मशीन में एसएचएस होने पर उन्हें कंसोल से शुरू करने में सक्षम होना चाहूंगा।

मुझे वह कमांड मिला है networksetupजो मुझे कनेक्शन कॉन्फ़िगर करने की अनुमति देता है, लेकिन जहां तक ​​मैं बता सकता हूं कि वास्तव में एक शुरू नहीं हो सकता है।

सिंह का उपयोग करना।


जवाबों:


41

नए macOS संस्करणों के लिए, एक बहुत ही सरल कमांड का उपयोग किया जा सकता है, जैसा कि नीचे दिए गए उत्तरों में दिखाया गया है, जैसे यह एक (इसे +1 दें!)।

जो तुम्हे चाहिए वो है:

 networksetup -connectpppoeservice "UniVPN"

एकमात्र समस्या यह है कि आप इस कमांड का उपयोग करके डिस्कनेक्ट नहीं कर सकते हैं।


आप अपनी पसंद की वीपीएन सेवाओं से जुड़ने के लिए AppleScript का भी उपयोग कर सकते हैं। हम एक बार लोड होने के बाद, कमांड लाइन से उपलब्ध शेल फ़ंक्शंस का उपयोग करेंगे।

नीचे दिए गए कार्यों को अपने ~/.bash_profileया ~/.profile(जो भी आप उपयोग करते हैं) जोड़ें।

आपको केवल वीपीएन कनेक्शन का नाम बदलने की आवश्यकता है, क्योंकि यह नेटवर्क वरीयताओं के तहत दिखाई देता है । मैंने यहां अपने विश्वविद्यालय के वीपीएन का उपयोग किया।

यहाँ छवि विवरण दर्ज करें

यदि आप इसे अलग-अलग लोगों के लिए करना चाहते हैं, तो आप कार्यों के नाम भी बदल सकते हैं। तर्कों का उपयोग करके इसे छोटा करना संभव हो सकता है, लेकिन यह इस तरह से ठीक काम करता है। मैंने इसे हिम तेंदुए पर परीक्षण किया (लेकिन तेंदुआ और शेर को भी काम करना चाहिए)।

एक बार जब आप फ़ंक्शन जोड़ लेते हैं, तो टर्मिनल को फिर से लोड करें और उन्हें क्रमशः कॉल करें 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
}

मुझे इस तरह का काम मिला जैसे backticks को boulder_ruby के कोड में डालकर। हालांकि आदर्श रूप से यह लौटने से पहले कॉलबैक की प्रतीक्षा करेगा। मेरा लक्ष्य को चलाने के लिए है vpn-connect && git fetch && vpn-disconnect। क्या आपको लगता है कि ऐसा करने का कोई तरीका है?
माइकल फॉरेस्ट

अच्छा विचार। मैंने अपनी स्क्रिप्ट को अपडेट किया ... बस इसे परीक्षण किया और यह काम करने लगता है।
17

1
यह स्पष्ट हो सकता है लेकिन सिर्फ रिकॉर्ड के लिए: ऐसा लगता है कि आपको वास्तव में काम करने के लिए जीयूआई सत्र खोलने की आवश्यकता है। जब मैं SSH के माध्यम से प्रवेश, जबकि सक्रिय एक ही उपयोगकर्ता के जीयूआई सत्र उस मशीन पर है और कॉल vpn-connectयह एक फेंक करता है syntax error: Expected end of line but found identifier. (-2741)लेकिन उसके बाद AppleScript संपादक के साथ एक आवेदन करने के लिए इसे परिवर्तित और बुला रही open vpn-connect.appयह काम करता है। हालाँकि, अगर उस उपयोगकर्ता का कोई सक्रिय GUI सत्र नहीं है, LSOpenURLsWithRole() failed with error -10810तो उसे SSH के माध्यम से कॉल करते समय फेंक दिया जाता है।
स्टीफन श्मिट

56

आप कम से कम शेर 1 के रूप में भी स्कूटिल कमांड का उपयोग कर सकते हैं।

उदाहरण के लिए, यदि मेरे पास "फू" नामक वीपीएन सेवा है, तो मैं इससे जुड़ सकता हूं:

$ scutil --nc start Foo

मैं वैकल्पिक रूप से एक ही नाम के झंडे का उपयोग करके एक उपयोगकर्ता, पासवर्ड और गुप्त निर्दिष्ट कर सकता हूं:

$ scutil --nc start Foo --user bar --password baz --secret quux

सेवा के माध्यम से डिस्कनेक्ट किया जा सकता है:

$ scutil --nc stop Foo

अधिक विस्तृत सहायता के लिए, आप मैन पेज देख सकते हैं , या चला सकते हैं:

$ scutil --nc help

अपडेट करें

कनेक्शन स्थापित होने तक पोल में एक त्वरित स्क्रिप्ट जोड़ना (एरिक बी की टिप्पणी के जवाब में)

#!/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 में जोड़ा गया था, तो मेरे पास मावेरिक्स में है, और उपयोगकर्ता एरिक बी की रिपोर्ट है कि यह शेर (10.7.5) में काम करता है।

सिर्फ लायन (10.7.5) में यह कोशिश की और यह बहुत अच्छा काम करता है। सिर्फ मैन पेजों में दस्तावेज नहीं। धन्यवाद!
एरिक बी।

लौटने से पहले कनेक्शन पूरा होने तक प्रतीक्षा करने के लिए किसी भी तरह की प्रतीक्षा करें? कनेक्शन स्थापित होने के बाद मुझे एक स्क्रिप्ट चलाने की आवश्यकता है, लेकिन स्कूटिल बहुत जल्दी लौटता है और कनेक्शन स्थापित होने से पहले निम्न कमांड निष्पादित होता है।
एरिक बी।

@EricB। त्वरित स्क्रिप्ट के लिए मेरे अपडेट देखें।
एनकोडेड

उपयोगकर्ता नाम विकल्प होना चाहिए --user, नहीं--username
रॉकलाईट

2
कोई भी विचार क्यों scutil --nc stop Foo(योसमाइट पर) काम नहीं करता है?
फिद

26

शेर के तहत इसका परीक्षण नहीं किया गया है, लेकिन मैं बिना किसी समस्या के माउंटेन शेर के तहत निम्नलिखित कमांड का उपयोग कर रहा हूं:

networksetup -connectpppoeservice UniVPN

यह काम करना चाहिए इस उपयोगिता को '02 में वापस जोड़ा गया था।
एल डेवलपर

2
हां, आश्चर्यजनक रूप से यह दृष्टिकोण भले ही वीपीएन सेवाओं के लिए नहीं बल्कि पीपीपीओई सेवाओं के लिए हो, लेकिन डिस्कनेक्ट करना इस तरह से काम नहीं करता है।
स्टीफन श्मिट

यह साझा किए गए गुप्त के साथ L2TP संग्रहीत कार्य करता है, जबकि scutilऐसा नहीं है!
कोन्स्टेंटिन सुवोरोव

यह पूरी तरह से काम करता है, क्योंकि scutilकिसी भी बचाया डेटा को नहीं लेता है, जो एक दर्द है।
मैट फ्लेचर

मेरे लिए OS X 10.13.5 पर काम किया !!
यूजर 7391

0

मैंने इस लिपि का उपयोग स्ल्हॉक द्वारा किया गया था (जो स्पष्ट रूप से एक स्वर्ण देवता है) इस निफ्टी रूबी लिपि को बनाने के लिए जिसका उपयोग सभी प्रकार की चीजों के लिए किया जा सकता है

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"myvpn नामक vpn से कनेक्ट करने के लिए उपयोग कर सकते हैं , और networksetup -disconnectpppoeservice "myvpn"myvpn नाम के vpn से डिस्कनेक्ट करने के लिए उपयोग कर सकते हैं

इन कमांड लाइनों का उपयोग करने से पहले, आपको सिस्टम वरीयताएँ> नेटवर्क में कनेक्शन को मैन्युअल रूप से कॉन्फ़िगर करना होगा


0

MacOS 10.14.5 Mojave पर काम करता है:

कनेक्ट वीपीएन : @ slhck के उत्तर का उपयोग करें -> networksetup -connectpppoeservice "VPN Name"

वीपीएन को डिस्कनेक्ट करें : @ एनकोडेड के उत्तर से -> scutil --nc stop "VPN Name"

इसने IPSEC VPN पर मेरे L2TP के लिए काम किया। मैंने सिस्को IPSEC या IKEv2 वीपीएन का परीक्षण नहीं किया

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.