Есть задача — подключение к 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. В целом, можно сделать более секурно и конфигурируемо, положить ваш секрет куда-то, и уже в скрипте доставать его. Но уже сейчас мы получили надежную и удобную схему. Куда лучше, чем просто подключение по сохраненному паролю, в тоже время такую же удобную ;)