Подключите dbt к Postgres с помощью SSH-бастиона
Мы хотим подключить dbt к Postgres с помощью SSH-бастиона. Я следил за комментариями, оставленными под этой проблемой, но получаю ошибку тайм-аута.
Несколько вопросов:
- Как следует
profiles.yml
настроить подключение через SSH? я добавилssh-host
но это не помогло. - Есть ли другие конфигурации, которые мне нужно настроить?
2 ответа
Я просто взломал свой путь, чтобы понять это, и шаги, перечисленные в приведенном выше комментарии , были очень полезны для кого-то с нулевым опытом в этой области, которому все еще нужно использовать dbt с хостом-бастионом. Вот конкретно, как я это сделал, и некоторые полезные ресурсы, с которыми я столкнулся. Надеюсь, другие найдут эти примеры полезными.
Вы регистрируете открытый SSH-ключ с удаленным местоположением, привязанным к закрытому ключу, который находится на вашем компьютере.
На Github есть полезное руководство, как это сделать: https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it . -to-the-ssh-agent
Добавить ключи в ~/.ssh/config: добавление ключа RSA без перезаписи .
Мне также пришлось добавить IgnoreUnknown UseKeychain в ~/.ssh/config
Вы используете инструмент командной строки (например, ssh, autossh) для «переадресации» локального порта в удаленное место (хост-бастион).
Чтобы перенаправить локальный порт на хост-бастион, сохраните своего пользователя/хост-бастион/хост базы данных в переменных среды. Я использовал Postgres, поэтому это выглядело так.
ssh -l $BASTION_USER $BASTION_HOST -p 22 -N -C -L "5432:${POSTGRES_HOST}:5432";
В profiles.yml вместо хоста/порта удаленной базы данных вы указываете локальный хост и номер «пересылающего» порта
Затем в моем ~/.dbt/profiles.yml выглядит это:
dev:
type: postgres
threads: 1
host: localhost
port: 5432
user: POSTGRES_USER
pass: POSTGRES_PWD
dbname: POSTGRES_DB_NAME
schema: dbt_tmp
Вуаля! Ваше соединение перенаправляется на хост-бастион, аутентифицируется через SSH и передается в базу данных.
В этот момент я побежалdbt debug
против моей цели, и это связано со всеми пройденными проверками.
Я думаю, вам нужно следовать инструкциям Джереми из этого комментария:
Основная идея, насколько я ее помню:
- Вы регистрируете открытый SSH-ключ с удаленным местоположением, привязанным к закрытому ключу, который находится на вашем компьютере.
- Вы используете инструмент командной строки (например, ssh,autossh) для «переадресации» локального порта в удаленное место (хост-бастион).
- В profiles.yml вместо хоста/порта удаленной базы данных вы указываете локальный хост и номер «пересылающего» порта
- Вуаля! Ваше соединение перенаправляется на хост-бастион, аутентифицируется через SSH и передается в базу данных.
Справедливости ради, он также просил окончательные пошаговые руководства и предупредил, что это имело разный уровень успеха в зависимости от особенностей клиента, хоста, среды и т. д.