Google Cloud - 通过私钥访问Linux VM

问题描述 投票:2回答:5

我在Google云中创建了一个Linux VM,现在我正试图通过SSH访问VM。

我能够SSH到服务器,如果我通过接口进入控制台,但我正在尝试生成一个可移植的私钥文件(pem),我可以从任何地方使用它远程到服务器。

我可以在创建虚拟机的过程中轻松地在AWS或Azure上实现这一点,但在GC上似乎并非如此。

google-cloud-platform google-compute-engine ssh-keys
5个回答
1
投票

我理解你的意思,但谷歌会更自动地做到这一点。

在任何本地计算机中,首先获得具有正确访问权限的服务帐户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再次访问它。


2
投票

这不是gcloud的工作方式。

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

你有2个选择。您可以通过编辑实例设置添加ssh键实例范围(屏幕截图1),也可以在计算服务的元数据部分中添加ssh key项目(屏幕截图2)。

Screenshot1

Screenshot 1

截图2

Screenshot 2


1
投票

在工作站上打开终端并使用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的公钥文件。

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

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

chmod 400 ~/.ssh/[KEY_FILENAME]

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

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

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

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

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

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

在Google Cloud Platform Console中,转到项目的元数据页面。它可以在GCE菜单下找到。

在SSH密钥下,单击“编辑”。

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

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

使用ssh连接到实例

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

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

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

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

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


1
投票

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

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

  1. 使用项目JSON密钥验证您的服务 gcloud auth activate-service-account --key-file=[keyfile_for_project].json
  2. 在本地计算机上创建ssh密钥对 $(which ssh-keygen) -t rsa -C "[email protected]"
  3. 将您刚刚在id_rsa.pub中创建的公钥添加到VM的元数据中(Mohit Kumar的答案中包含的精彩截图) cat $PWD/id_rsa.pub(将此输出粘贴到SSH密钥元数据中)
  4. 使用您刚刚在ssh中创建的私钥将id_rsa添加到VM实例 ssh -v -i id_rsa [user]@[external_ip]

如果你想让这个便携式,只需随身携带私钥(id_rsa)公钥(id_rsa.pub


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.