Есть задача — подключение к VPN настроено через разовые коды 2FA, каждый раз при подключении смотреть в телефон — секурно, но очень не удобно и долго. Как быть в таком случае?

Попробуем разобраться и добавить немного автоматизации в рутину. В таком случае, нам конечно надо обеспечить секурность доступа к ноуту, что бы никто не смог воспользоваться нашим подключением.

Для этого нам потребуется tunnelblick. Настраивать будем связку с Google Authenticator. Все, что будет описано — работает на самой свежей macOS.

Подготовка

Нам потребуется для удобства установки менеджер https://brew.sh

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew help 

После этого поставим https://formulae.brew.sh/formula/oath-toolkit. Эта штука как раз позволит получать 2FA коды. Можно считать его консольным клиентом

brew install oath-toolkit

Команда для получения будет такая. В нее стоит указывать секрет, который вы получили, если вдруг он потерян, то можно достать прямо из приложения. Но это отдельная история

oathtool --totp -b "your_secret_key_here"

Так же нам потребуется в дальнейшем полный путь до команды oathtool, так как именно внутри спирта в Tunnelblick не тянется переменные для запуска

which oathtool 

Теперь мы умеем получать одноразовые коды, переходим к настройке Tunnelblick

Tunnelblick

Готовим скрипт и конфиг vpn (подробности) и находим путь, где лежит ваш конфиг (подробности)

Если у вас macOS, то скорее всего можно искать тут: /Users/username/Library/Application Support/Tunnelblick/Configurations

Находим файл CONFIG_NAME.tblk открываем его, и прям в нем создаем файл с определенным именем:

touch password-replace.user.sh
chmod +X password-replace.user.sh

Внутри собираем такую конструкцию

/opt/homebrew/bin/oathtool --totp -b “YOURSECRETHERE”

P.S. В целом, можно сделать более секурно и конфигурируемо, положить ваш секрет куда-то, и уже в скрипте доставать его. Но уже сейчас мы получили надежную и удобную схему. Куда лучше, чем просто подключение по сохраненному паролю, в тоже время такую же удобную ;)