Передайте параметры 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. чтобы вы могли быть уверены, что отключение проверки применимо только к конкретным хостам, которые вам нужны.