Google 云 - 通过私钥访问 Linux 虚拟机

Google Cloud - accessing Linux VM via private key

我在 Google 云中创建了一个 linux 虚拟机,现在我正在尝试通过 SSH 访问该虚拟机。

我可以通过 SSH 连接到服务器,如果我通过界面登录到控制台,但是我正在尝试生成一个便携式私钥文件 (pem ) 我可以用它从 anywhere.

远程连接到服务器

我可以在创建 VM 期间在 AWS 或 Azure 上轻松实现这一点,但在 GC 上似乎并非如此。

对于 SSH 访问,您不会使用 pem 密钥。在您的客户端计算机上,您应该 运行(如果在 unix/linux 系统中)ssh-keygen,这将引导您创建您的 ssh 密钥(默认为 RSA)。然后,您需要将 public 密钥(~/.ssh/id_rsa.pub 或创建期间指定的文件)添加到服务器上的 ~/.ssh/authorized_keys

这不是 gcloud 的工作方式。

Google Cloud Platform 实际上在计算服务中创建 VM 实例时预先使用 public 密钥。您可以使用 ssh-keygen 在您的计算机上生成密钥,并通过以下方法将其添加到您的实例中。

你有2个选项。您可以通过编辑实例设置在实例范围内添加 ssh 密钥(屏幕截图 1),或者在计算服务的元数据部分明智地添加 ssh 密钥项目(屏幕截图 2)。

截图1

截图2

在您的工作站上打开一个终端并使用 ssh-keygen 命令生成一个新密钥。指定 -C 标志以使用您的用户名添加评论。

ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]

其中: [KEY_FILENAME] 是您要用于 SSH 密钥文件的名称。例如,文件名 my-ssh-key 生成一个名为 my-ssh-key 的私钥文件和一个名为 my-ssh-key.pub.

的 public 密钥文件

[USERNAME] 是您将为其应用此 SSH 密钥的用户。

限制对您的私钥的访问,以便只有您可以读取它,没有人可以写入它。

chmod 400 ~/.ssh/[KEY_FILENAME]

其中 [KEY_FILENAME] 是您用于 SSH 密钥文件的名称。 为每个需要新密钥的用户重复此过程。

如果您使用 ssh-keygen 工具在 Linux 工作站上创建了密钥,密钥将保存在以下位置:

Public 密钥文件:~/.ssh/[KEY_FILENAME].pub

私钥文件:~/.ssh/[KEY_FILENAME]

其中 [KEY_FILENAME] 是 SSH 密钥的文件名,它是在创建密钥时设置的。

从 GCP 控制台添加或删除项目范围的 public SSH 密钥:

在 Google 云平台控制台中,转到项目的元数据页面。可以在GCE菜单下找到。

在 SSH 密钥下,单击编辑。

修改项目范围的 public SSH 密钥:要添加 public SSH 密钥,请单击页面底部的添加项目。这将产生一个文本框。复制 public SSH 密钥文件的内容并将其粘贴到文本框中。对要添加的每个 public 个 SSH 密钥重复此过程。

完成后,单击页面底部的“保存”。

使用 ssh 连接到实例

在终端中,使用 ssh 命令和您的 SSH 私钥文件连接到您的实例。指定您的用户名和您要连接的实例的外部 IP 地址。

ssh -i [PATH_TO_PRIVATE_KEY] [USERNAME]@[EXTERNAL_IP_ADDRESS]

其中: [PATH_TO_PRIVATE_KEY] 是您的 SSH 私钥文件的路径。

[USERNAME] 是连接到实例的用户名。 public SSH 密钥的用户名是在创建 SSH 密钥时指定的。如果实例具有该用户的有效 public SSH 密钥并且您具有匹配的私有 SSH 密钥,则您可以作为该用户连接到实例。

[EXTERNAL_IP_ADDRESS] 是您实例的外部 IP 地址。 如果连接成功,您可以使用终端在您的实例上执行 运行 命令。完成后,使用 exit 命令断开与实例的连接。

我明白你的意思,但是 google 做起来更自动一些。

任何本地计算机中,首先获取一个具有访问权限的服务帐户json。

gcloud 授权人

gcloud auth activate-service-account --key-file=KEY_FILE.json

然后,

gcloud compute config-ssh [--ssh-config-file=SSH_CONFIG_FILE] [--ssh-key-file=SSH_KEY_FILE]

您可能已经有了 ssh 文件,但如果您只是让 gcloud 生成它就没问题。

您终于可以从这台计算机通过 ssh 连接到任何计算引擎了,

gcloud compute ssh [USER@]INSTANCE

而下次在同一台计算机上,您只需使用gcloud compute ssh再次访问即可。

我找到了这个答案,只是想更新对我有用的内容

在您的计算机上安装 gcloud 客户端(无论您希望连接到 VM 的计算机)。

  1. 使用您的项目 JSON 密钥验证您的服务
    gcloud auth activate-service-account --key-file=[keyfile_for_project].json

  2. 在本地机器上创建 ssh 个密钥对
    $(which ssh-keygen) -t rsa -C "your@email.com"

  3. 将您刚刚在 id_rsa.pub 中创建的 public 密钥添加到您的 VM 的元数据中(Mohit Kumar 的回答中包含了这方面的精彩截图)
    cat $PWD/id_rsa.pub(将此输出粘贴到 SSH 密钥元数据中)
  4. ssh 使用您刚刚在 id_rsa
    中创建的私钥到 VM 实例 ssh -v -i id_rsa [user]@[external_ip]

如果你想让它便携,只需随身携带私钥 (id_rsa) public 密钥 (id_rsa.pub) 配对