Передайте параметры SSH для docker-compose при развертывании на удаленном сервере (используя переменную DOCKER_HOST).

Я использую Vagrantbox для регулярной проверки настройки физической машины. Это обрабатывается скриптом bash в Ubuntu, Vagrant и Virtualbox.

Настройка и подготовка виртуальной машины работают. Теперь я хочу развернуть контейнеры через docker-compose с моего хоста на виртуальную машину через . Это развертывание также работает. Но поскольку я удаляю Vagrantbox после каждого запуска теста, при следующем запуске у меня появляется своя совершенно новая виртуальная машина. А поскольку виртуальная машина совершенно новая, мне всегда задают классический вопрос о подключении по ssh:

      The authenticity of host '192.168.56.99 (192.168.56.99)' can't be established.
ED25519 key fingerprint is SHA256:YFbh/pNm51dFOw6cOTkadob0bVWDoJdmSSlc/xREoDY.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Это не очень круто, когда я автоматизирую свой тестовый сценарий, потому что это всегда означает ручное взаимодействие. Очистить файлknown_hosts после этого легко (ssh-keygen -R "$BOX_IP"), но мне бы хотелось для начала избежать этого вопроса.

При каждом тестовом запуске создается новый Vagrantbox с новым IP-адресом (из-за DHCP). Но статический IP-адрес тоже не будет работать, потому что виртуальная машина каждый раз обновляется. Тогда в вопросе будет указано, что машина и ее ключи изменились/не совпадают. Тоже ручное взаимодействие или вообще сбой.

Обычный ssh ​​позволяет обрабатывать StrictHostKeyChecking:ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" "$BOX_USER@$BOX_IP". Но я не могу найти способ сказать docker-compose то же самое.

Я не хочу глобально отключать StrictHostKeyChecking, потому что это открывает двери для проблем безопасности, таких как атаки «человек посередине».

Кто-нибудь знает, как я могу передать параметры SSH на свойDOCKER_HOST="ssh://$BOX_USER@$BOX_IP" docker-compose up -dкоманда? Может быть, с другим env-var или чем-то еще?

Я хочу выполнить развертывание через ssh с хоста на виртуальную машину, потому что я использую тот же способ развертывания с моего хоста на реальной физической удаленной машине (с другим пользователем и IP-адресом). Только здесь у меня нет проблем с новыми виртуальными машинами каждый раз. Таким образом, принятие вопросов SSH один раз работает для будущих развертываний.

1 ответ

Я не хочу глобально отключать StrictHostKeyChecking, потому что это открывает двери для проблем безопасности, таких как атаки «человек посередине».

Если у вас настроен бродячий провайдер, который настраивает ящики для определенного диапазона адресов или подсети. Затем вы можете настроить параметры ssh, чтобы пропустить проверку этого конкретного диапазона.

      # ~/.ssh/config

# disable key checking for vagrant range
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host * 
   # ... default config

См. справочную страницу ssh_config, в частности Host, Match и PATTERNS, чтобы узнать, как настроить конфигурацию ssh. чтобы вы могли быть уверены, что отключение проверки применимо только к конкретным хостам, которые вам нужны.

Другие вопросы по тегам