部署到远程服务器时将 SSH 选项传递给 docker-compose(使用 DOCKER_HOST var)

部署到远程服务器时将 SSH 选项传递给 docker-compose(使用 DOCKER_HOST var)

我使用 Vagrantbox 定期测试物理机的设置。这由 Ubuntu、Vagrant 和 Virtualbox 上的 bash 脚本处理。

VM 的设置和配置已完成。现在我想通过 docker-compose 将容器从我的主机部署到 VM DOCKER_HOST="ssh://$BOX_USER@$BOX_IP" docker-compose up -d。此部署同样有效。但由于我在每次测试运行后都会处理 Vagrantbox,因此下一次运行将获得自己的全新 VM。由于 VM 是全新的,我总是会遇到经典的 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命令吗?也许使用另一个环境变量或其他东西?

我想通过 ssh 从主机部署到虚拟机,因为我使用相同的方式从主机部署实际的物理远程计算机(具有不同的用户和 IP)。只有在这里,我每次使用新虚拟机时都不会遇到问题。因此,接受一次 SSH 问题对于将来的部署有用。

答案1

我不想全局禁用 StrictHostKeyChecking,因为这会引发中间人攻击等安全问题。

如果您已配置 vagrant provider,该提供程序会为特定范围的地址或子网配置框。那么您可以配置 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 配置。这样您就可以确保禁用检查仅适用于您想要的特定主机。

相关内容