我已在我的 GCE Debian VM 实例 (1) 中安装了 ansible。现在我想连接到另一个 GCE Debian VM 实例(2)。 我已在实例 1 上生成了公钥,并将 .pub key 手动复制到实例 2 的授权 key 中。 但是,当我尝试从 1 到 2 执行 ssh 时,它给出的权限被拒绝。
还有其他办法吗?我对此有点陌生,正在努力学习。 有可用的分步指南吗?以及执行 ssh 的确切 IP 地址是什么?是内部IP还是实例启动时GCE获取的外部IP。
最佳答案
我也是 Ansible 用户,我管理一组计算引擎服务器。我的场景与您的非常接近,因此希望这也适合您。为了使其顺利工作,您只需要认识到 ssh 公钥是元数据,可用于告诉 GCE 在实例创建时创建用户帐户。
SSH 公钥是项目范围的元数据
要获得您想要的内容,应将 ssh 公钥添加到 Compute Engine 下的元数据部分。我的 key 看起来像这样:
ssh-rsa AAAAB3<long key sequence shortened>Uxh bob
每次我让 GCE 创建实例时,它都会创建/home/bob 并将 key 放入 .ssh/authorized_keys 部分,并设置所有正确的权限。这意味着如果我有私钥,我可以通过 ssh 进入该服务器。在我的场景中,我仅将私钥保存在两个位置:LastPass 和工作计算机上的 .ssh 目录。 虽然我不推荐这样做,但您也可以将该私钥复制到您想要进行 ssh 访问的每台服务器上的 .ssh 目录,但我真的建议您掌握 ssh-agent
让它与 Ansible 一起使用
其核心是告诉 Ansible 不要验证主机检查并以 key 中指定的用户(本例中为 bob)进行连接。为此,您需要在调用 ansible 时设置一些 ssh 选项
ansible-playbook -ssh-common-args='-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' -u bob
现在,Ansible 将连接到您的 playbook 中提到的服务器,并尝试使用本地私钥来协商 ssh 连接,这应该可以正常工作,因为 GCE 将在创建 VM 时为您进行设置。此外,由于主机名检查已关闭,您可以根据需要随时重建虚拟机。
再说一遍
我强烈建议您从少量安全计算机上运行 ansible,而不是将您的私钥放在云服务器上。如果您确实需要在服务器之间进行 ssh,请研究 ssh-agent 如何传递身份。一个好的起点是 this article .
你说元数据在哪里?
我有点掩盖了这一点,但这里有一张图片可以帮助您开始。
从那里您只需按照添加公钥的选项即可。不要忘记这是有效的,因为 key 的第三部分是您希望 GCE 和 Ansible 在运行 play 时使用的用户名。
关于ssh - 如何在 2 个 Google Cloud Debian 实例之间进行 SSH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51598051/