Last active
February 4, 2022 07:47
-
-
Save modestman/004f250662d81e0bb86eb214c87c8cb0 to your computer and use it in GitHub Desktop.
Подключение к Endpoint Security VPN с помощью bash скрипта
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Инструкция | |
# | |
# Для начала надо попросить у техподдрежки, чтобы сменили способ 2FA с приложения Multifactor на Google Authenticator. | |
# Во время настройки Google Authenticator сделайте скриншот QR кода и сохраните его в виде картинки. | |
# На сайте webqr.com можно расшифровать QR код и получить secret для генерации OTP. | |
# Пример: otpauth://totp/Luna:username?secret=TQPNWO37ZC6J6RG22MLSOIKQR5&algorithm=SHA256 | |
# | |
# В приложении "Связка ключей" на macOS необходимо вручную создать две записи с паролями: | |
# `luna-vpn` - имя пользователя и пароль от VPN | |
# `luna-vpn-otp-key` - ключ для генерации OTP кода, вставьте значение secret из QR | |
# | |
# Установите утилиту oathtool с помощью brew | |
# | |
keychain_pw_name="luna-vpn" | |
keychain_otp_name="luna-vpn-otp-key" | |
if ! command -v oathtool &> /dev/null; then | |
echo "oathtool not found, please run the folowwing command:" | |
echo "brew install oathtool" | |
fi | |
# Получаем из Keychain имя пользователя | |
USER=$(security find-generic-password -s $keychain_pw_name | perl -lne 'print $1 if /"acct"<blob>="(.+)"/') | |
# Получаем из Keychain пароль и ключ для OTP | |
if ! PASSWORD=$(security find-generic-password -w -s "$keychain_pw_name"); then | |
echo "Could not get password, error $?" | |
exit 1 | |
fi | |
if ! OTP_KEY=$(security find-generic-password -w -s "$keychain_otp_name"); then | |
echo "Could not get OTP key, error $?" | |
exit 1 | |
fi | |
# Получаем текущий статус VPN | |
get_connection_status() { | |
"/Library/Application Support/Checkpoint/Endpoint Connect/trac" info | perl -lne 'print $1 if /status: (\w+)/' | |
} | |
STATUS=`get_connection_status` | |
if [[ $STATUS = "Idle" ]]; then | |
# генерируем новый OTP | |
OTP=`oathtool --totp -b $OTP_KEY` | |
# Подключаемся к VPN и вводим OTP | |
/usr/bin/expect <<EOD | |
set timeout -1 | |
spawn {/Library/Application Support/Checkpoint/Endpoint Connect/trac} connect -s 217.73.59.69 -u $USER -p $PASSWORD | |
expect "Google Authenticator: " | |
send -- "$OTP\r" | |
expect eof | |
EOD | |
if [[ `get_connection_status` == "Connected" ]]; then | |
# Устанавливаем DNS Луны | |
networksetup -setdnsservers Wi-Fi 10.58.60.4 10.58.60.5 | |
networksetup -setsearchdomains Wi-Fi luna.opends.tech | |
else | |
echo "Can't connect" | |
fi | |
elif [[ $STATUS = "Connected" || $STATUS = "Connecting" ]]; then | |
# Отключаемся от VPN | |
"/Library/Application Support/Checkpoint/Endpoint Connect/trac" disconnect | |
sleep 3 | |
# Устанавливаем дефолтные DNS | |
networksetup -setdnsservers Wi-Fi Empty | |
networksetup -setsearchdomains Wi-Fi Empty | |
else | |
echo "Unknown status: $STATUS" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment