如何在 2 Google 云 Debian 实例之间进行 SSH
How to SSH between 2 Google Cloud Debian Instances
我已经在我的 GCE Debian VM 实例 (1) 中安装了 ansible。现在我想连接到另一个 GCE Debian VM 实例 (2)。
我在实例 1 上生成了 public 密钥,并手动将 .pub 密钥复制到实例 2 的授权密钥。
但是,当我尝试从 1 到 2 执行 ssh 时,它给出了被拒绝的权限。
还有别的办法吗?我对此有点陌生,正在努力学习。
是否有可用的分步指南?以及执行 ssh 的确切 ip 地址是什么?是Internal IP还是Instance启动时GCE占用的External IP
如果您在 google 云平台中有两个实例,这将非常简单,您会自动安装来宾环境(gcloud 命令行),使用它您可以在项目中通过所有 ssh 进行 ssh:
只需 运行 实例 A 中的以下命令行即可到达实例 B
[user@Instance(1)]$ gcloud compute ssh Instance(2) --zone [zone]
就是这样,如果它不起作用请告诉我,并验证您的防火墙规则是否允许内部流量。
我也是一个 Ansible 用户,我管理着一套计算引擎服务器。我的情况与您的情况非常接近,因此希望这也对您有用。为了让它顺利运行,您只需要意识到 ssh public 密钥是元数据,可用于告诉 GCE 在创建实例时创建用户帐户。
SSH public 密钥是项目范围的元数据
要获得您想要的内容,应将 ssh public 密钥添加到 Compute Engine 下的元数据部分。我的钥匙看起来像这样:
ssh-rsa AAAAB3<long key sequence shortened>Uxh bob
每次我让 GCE 创建实例时,它都会创建 /home/bob 并将密钥放入具有所有正确权限集的 .ssh/authorized_keys 部分。这意味着如果我有私钥,我可以通过 ssh 进入该服务器。在我的场景中,我只将私钥保存在两个地方,LastPass 和我工作计算机上的 .ssh 目录。 虽然我不推荐这样做,但您也可以将该私钥复制到您要从中使用 ssh 的每台服务器上的 .ssh 目录,但我真的建议您掌握 ssh-agent
让它与 Ansible 一起工作
其核心是告诉 Ansible 不要验证主机检查并以密钥中指定的用户(本例中为 bob)进行连接。为此,您需要在调用 ansible
时设置一些 ssh 选项
ansible-playbook -ssh-common-args='-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' -u bob
现在 Ansible 将连接到您的剧本中提到的服务器,并尝试使用本地私钥协商 ssh 连接,这应该可以正常工作,因为 GCE 会在创建 VM 时为您进行设置。此外,由于主机名检查已关闭,您可以根据需要随时重建 VM。
再说一遍
我真的建议您 运行 从少量安全计算机上获取 ansible,而不是将您的私钥放在云服务器上。如果您确实需要在服务器之间进行 ssh,请查看 ssh-agent 如何传递身份。一个好的起点是 this article.
你说元数据在哪里?
我有点掩盖了这一点,但这里有一张图片可以帮助您入门。
从那里您只需按照添加 public 密钥的选项进行操作。不要忘记这是可行的,因为密钥的第三部分是您希望 GCE 和 Ansible 在 运行ning 播放时使用的用户名。
我已经在我的 GCE Debian VM 实例 (1) 中安装了 ansible。现在我想连接到另一个 GCE Debian VM 实例 (2)。 我在实例 1 上生成了 public 密钥,并手动将 .pub 密钥复制到实例 2 的授权密钥。 但是,当我尝试从 1 到 2 执行 ssh 时,它给出了被拒绝的权限。
还有别的办法吗?我对此有点陌生,正在努力学习。 是否有可用的分步指南?以及执行 ssh 的确切 ip 地址是什么?是Internal IP还是Instance启动时GCE占用的External IP
如果您在 google 云平台中有两个实例,这将非常简单,您会自动安装来宾环境(gcloud 命令行),使用它您可以在项目中通过所有 ssh 进行 ssh:
只需 运行 实例 A 中的以下命令行即可到达实例 B
[user@Instance(1)]$ gcloud compute ssh Instance(2) --zone [zone]
就是这样,如果它不起作用请告诉我,并验证您的防火墙规则是否允许内部流量。
我也是一个 Ansible 用户,我管理着一套计算引擎服务器。我的情况与您的情况非常接近,因此希望这也对您有用。为了让它顺利运行,您只需要意识到 ssh public 密钥是元数据,可用于告诉 GCE 在创建实例时创建用户帐户。
SSH public 密钥是项目范围的元数据
要获得您想要的内容,应将 ssh public 密钥添加到 Compute Engine 下的元数据部分。我的钥匙看起来像这样:
ssh-rsa AAAAB3<long key sequence shortened>Uxh bob
每次我让 GCE 创建实例时,它都会创建 /home/bob 并将密钥放入具有所有正确权限集的 .ssh/authorized_keys 部分。这意味着如果我有私钥,我可以通过 ssh 进入该服务器。在我的场景中,我只将私钥保存在两个地方,LastPass 和我工作计算机上的 .ssh 目录。 虽然我不推荐这样做,但您也可以将该私钥复制到您要从中使用 ssh 的每台服务器上的 .ssh 目录,但我真的建议您掌握 ssh-agent
让它与 Ansible 一起工作
其核心是告诉 Ansible 不要验证主机检查并以密钥中指定的用户(本例中为 bob)进行连接。为此,您需要在调用 ansible
时设置一些 ssh 选项ansible-playbook -ssh-common-args='-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' -u bob
现在 Ansible 将连接到您的剧本中提到的服务器,并尝试使用本地私钥协商 ssh 连接,这应该可以正常工作,因为 GCE 会在创建 VM 时为您进行设置。此外,由于主机名检查已关闭,您可以根据需要随时重建 VM。
再说一遍
我真的建议您 运行 从少量安全计算机上获取 ansible,而不是将您的私钥放在云服务器上。如果您确实需要在服务器之间进行 ssh,请查看 ssh-agent 如何传递身份。一个好的起点是 this article.
你说元数据在哪里?
我有点掩盖了这一点,但这里有一张图片可以帮助您入门。
从那里您只需按照添加 public 密钥的选项进行操作。不要忘记这是可行的,因为密钥的第三部分是您希望 GCE 和 Ansible 在 运行ning 播放时使用的用户名。