টার্মিনালের মাধ্যমে কীভাবে ভিপিএন সংযোগ তৈরি করবেন?


9

আমার কাছে ম্যাকবুক প্রো রয়েছে ম্যাভেরিক্স সহ চলছে। আমি টার্মিনালে একটি ভিপিএন নেটওয়ার্কের সাথে সংযোগ করার জন্য একটি উপায় খুঁজছি।

আমি এটি করতে চাইার কারণটি হ'ল আমি পাইথনে একটি ছোট প্রোগ্রাম লিখতে চাই যা 30 সার্ভারের মধ্যে দ্রুততম ভিপিএন সার্ভারটি স্বয়ংক্রিয়ভাবে সনাক্ত করে। এটি একটি স্ব-অনুপ্রাণিত অনুশীলন প্রকল্প তাই আমি মনে করি আমি পাইথন ভাষার সাথে লেগে থাকব। সুতরাং আমি টাস্কটি ভেঙে ফেলেছি এবং মনে করি প্রোগ্রামটির প্রথমে কোনও একটি সার্ভারের সাথে সংযোগের প্রয়োজন হতে পারে এবং তার পরে, একটি গতি পরীক্ষা চালান।

সুতরাং আমি এখন এই প্রথম পদক্ষেপে আটকে গিয়েছি কারণ আমি বুঝতে পেরেছিলাম যে ভিপিএন সংযোগ স্থাপন করা সিস্টেম স্তরের অধীনে রয়েছে বলে মনে হয় যে পাইথনে আমি প্রাক-লিখিত ভিপিএন মডিউলটি পাই না। সুতরাং আমি অনুমান করি এটি যেমন হবে আমি পাইথনকে বলি যে কোনও ভিপিএন সার্ভারের সাথে সংযোগ স্থাপনের জন্য সিস্টেম শেলকে বলে।

আমি যখন চারপাশে হাঁটছিলাম এবং টাইপ করে একটি কমান্ড পেলাম apropos vpn। এটি বলা হয় vpnagent। তবে man vpnagentদরকারী তথ্য সরবরাহ করে না বা which vpnagentআমাকে বলবে না যে আমার ম্যাকে ইউটিলিটি ইনস্টল করা নেই। আমি আর একটি আকর্ষণীয় জিনিস খুঁজে পেয়েছি ছিল pppdকিন্তু কনফিগারেশন ফাইল সেট আপ খুব হতাশাজনক ছিল। আমি এটি করতে পরিচালিত হয়নি।

তাহলে কি টার্মিনাল ব্যবহার করে ভিপিএন-তে সংযোগের কোনও উপায় আছে? এছাড়াও, যেহেতু আমি প্রোগ্রামিংয়ে নতুন আছি, আমার প্রকল্প সম্পর্কে যে কোনও মন্তব্যও স্বাগত। তুমাকে অগ্রিম ধন্যবাদ.

উত্তর:


6

আপনি সুপার ব্যবহারকারী থেকে @ এসএলএইচএচ থেকে এই দুর্দান্ত বাশ ফাংশনগুলি ব্যবহার করতে পারেন :

বিভিন্ন ভিপিএনগুলির সাথে সংযোগ রাখতে, নেটওয়ার্ক.প্রিফ্পনে একাধিক ভিপিএন রয়েছে।

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
}

ভিপিএন এর নাম পরিবর্তন করতে ভুলবেন না।


ধন্যবাদ এটি কাজ করে। তবে এটি অনাহূত হয়ে যায় যে ~/.bash-profileপ্রতিবারই আমাকে অন্য ভিপিএন-তে সংযোগ দেওয়ার দরকার হয় আমার ভিপিএন এর নাম পরিবর্তন করা দরকার। ফাংশনে যুক্তি যুক্ত করার কোনও উপায় আছে, তাই আমি vpn-connect UniVPNকী কল করতে পারি ?
চৌশিশি

@ চৌশিশি আপনি বিভিন্ন নাম এবং বিভিন্ন ভিপিএন সহ কেবল একাধিক ফাংশন তৈরি করতে পারেন। ফাংশনটির সদৃশ করুন এবং প্রথম লাইনে ফাংশনের নাম এবং ভিপিএন নাম পরিবর্তন করুন।
grg

ধন্যবাদ এটি একটি ভাল সমাধান। আমি মনে করি এটিকে আরও মার্জিত করার জন্য আমি যুক্তি যুক্ত করার উপায় খুঁজতে চেষ্টা করব
চৌশিশি

1
@Choushishi আপনি এটা ঠিক প্রতিস্থাপন একটি আর্গুমেন্ট গ্রহণ করা করতে পারেন UniVPNদ্বারা $1। (ডাবল-কোট রাখার সময়)
টিমোথি বাউচার

6

স্কুটিল আপনার প্রয়োজন সমস্ত হওয়া উচিত।

scutil --nc start <service name>

ফলস্বরূপ প্রতিটি সাথে সংযোগ করার জন্য আপনার পাইথন স্ক্রিপ্টটিতে এর মতো কিছু অন্তর্ভুক্ত থাকতে পারে:

import re
from subprocess import call, check_output

vpns_string = check_output(["scutil", "--nc", "list"]) # lists all VPN services

vpns = re.findall('"(.+)"', vpns_string) # service names are double-quoted

for vpn in vpns:
  call(["scutil", "--nc", "start", vpn])
  #...do stuff with your connection, test speed etc.
  call(["scutil", "--nc", "stop", vpn])

scutil --nc helpব্যবহারের জন্য দেখুন - এর সাথে সংযোগ রাখতে আপনি ব্যবহারকারীর নাম, পাসওয়ার্ড এবং গোপন নির্দিষ্ট করতে পারেন ।


2
#!/bin/sh
# Random UUID for this config
vpnUuid=``
# Address of VPN server
serverName=""
# The group of usernames that is allowed in
groupName=""
# The name of connection type displayed in GUI
labelName=""
# The Shared Secret
sharedSecret=""
# The user this VPN config is for
userName=""

# CHECK TO SEE IF A VALUE WAS PASSED IN PARAMETER 4 AND, IF SO, ASSIGN TO "serverName"
if [ "$4" != "" ] && [ "$ranAtImaging" == "" ]; then
    ranAtImaging=$4
fi

# CHECK TO SEE IF A VALUE WAS PASSED IN PARAMETER 5 AND, IF SO, ASSIGN TO "serverName"
if [ "$5" != "" ] && [ "$serverName" == "" ]; then
    serverName=$5
fi

# CHECK TO SEE IF A VALUE WAS PASSED IN PARAMETER 6 AND, IF SO, ASSIGN TO "groupName"
if [ "$6" != "" ] && [ "$groupName" == "" ]; then
    groupName=$6
fi

# CHECK TO SEE IF A VALUE WAS PASSED IN PARAMETER 7 AND, IF SO, ASSIGN TO "labelName"
if [ "$7" != "" ] && [ "$labelName" == "" ]; then
    labelName=$7
fi

# CHECK TO SEE IF A VALUE WAS PASSED IN PARAMETER 8 AND, IF SO, ASSIGN TO "sharedSecret"
if [ "$8" != "" ] && [ "$sharedSecret" == "" ]; then
    sharedSecret=$8
fi

# CHECK TO SEE IF A VALUE WAS PASSED IN PARAMETER 9 AND, IF SO, ASSIGN TO "userName"
if [ "$9" != "" ] && [ "$userName" == "" ]; then
    userName=$9
fi

loggedInUser=`/bin/ls -l /dev/console | /usr/bin/awk '{ print $3 }'`
macModel=`system_profiler SPHardwareDataType | grep "Model Name:" | awk '{ print $3 }'`

# Check that we are running this on a MacBook
if [ "$macModel" == "MacBook" ]; then

    # Setup Keychain shared secret granting appropriate access for the OS apps
    /usr/bin/security add-generic-password -a "$groupName" -l "$labelName" -D "IPSec Shared Secret" -w "$sharedSecret" -s "$vpnUuid".SS -T /System/Library/Frameworks/SystemConfiguration.framework/Resources/SCHelper -T /Applications/System\ Preferences.app -T /System/Library/CoreServices/SystemUIServer.app -T /usr/sbin/pppd -T /usr/sbin/racoon /Library/Keychains/System.keychain

    # Write a Network Config containing this keychain item directly to System Config
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:DNS dict" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPv4 dict" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPv4:ConfigMethod string Automatic" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPv6 dict" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:Proxies dict" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:Proxies:ExceptionList array" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:Proxies:ExceptionList:0 string \*\.local" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:Proxies:ExceptionList:1 string 169\.254\/16" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:Proxies:FTPPassive integer 1" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:SMB dict" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:UserDefinedName string $labelName" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:Interface dict" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:Interface:Type string IPSec" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPSec dict" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPSec:AuthenticationMethod string SharedSecret" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPSec:LocalIdentifier string $groupName" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPSec:LocalIdentifierType string KeyID" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPSec:RemoteAddress string $serverName" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPSec:SharedSecret string $vpnUuid\.SS" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPSec:SharedSecretEncryption string Keychain" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPSec:XAuthName string $userName" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :NetworkServices:$vpnUuid:IPSec:XAuthPasswordEncryption string Prompt" /Library/Preferences/SystemConfiguration/preferences.plist

    # At this point, we should have only one Network Set (Automatic) so we find out its UUID — errr, messy
    autoUuid=`/usr/libexec/Plistbuddy -c "Print :Sets" /Library/Preferences/SystemConfiguration/preferences.plist | grep -B1 -m1 Automatic | grep Dict | awk '{ print $1 }'`

    # and we add our newly created config to the default set
    /usr/libexec/PlistBuddy -c "Add :Sets:$autoUuid:Network:Service:$vpnUuid dict" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :Sets:$autoUuid:Network:Service:$vpnUuid:__LINK__ string \/NetworkServices\/$vpnUuid" /Library/Preferences/SystemConfiguration/preferences.plist
    /usr/libexec/PlistBuddy -c "Add :Sets:$autoUuid:Network:Global:IPv4:ServiceOrder: string $vpnUuid" /Library/Preferences/SystemConfiguration/preferences.plist

else
    echo "This mac is not a MacBook… so skipping…"
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.