ssh - 如何在 2 个 Google Cloud Debian 实例之间进行 SSH

标签 ssh google-compute-engine ansible-2.x

我已在我的 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 .


你说元数据在哪里?

我有点掩盖了这一点,但这里有一张图片可以帮助您开始。

enter image description here

从那里您只需按照添加公钥的选项即可。不要忘记这是有效的,因为 key 的第三部分是您希望 GCE 和 Ansible 在运行 play 时使用的用户名。

关于ssh - 如何在 2 个 Google Cloud Debian 实例之间进行 SSH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51598051/

相关文章:

Java - 创建 Github v3 公钥

google-app-engine - OAuth : Starting a Google Compute Instance from within Google App Engine

mysql - 间歇性2013, "Lost connection to MySQL server at '读取初始通信包',系统错误: 0"to CloudSQL

ansible - 如何从 ansible 中的 stdout.lines 中提取准确的输出

linux - 仅当变量包含特定字符串时才运行 Ansible 任务

Ansible:我们可以异步运行包含剧本吗?

python - 从 python 执行 scp 时出错

javascript - 通过浏览器打开新的 SSH 终端

google-cloud-platform - Google 计算 promise 使用/预订不使用我现有的实例

linux - 如何在没有密码的情况下 ssh 另一个虚拟机