Skip to content

Instantly share code, notes, and snippets.

@modestman
Last active February 4, 2022 07:47
Show Gist options
  • Save modestman/004f250662d81e0bb86eb214c87c8cb0 to your computer and use it in GitHub Desktop.
Save modestman/004f250662d81e0bb86eb214c87c8cb0 to your computer and use it in GitHub Desktop.
Подключение к Endpoint Security VPN с помощью bash скрипта
#!/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