如何获取新的Google Compute Engine实例的ssh密钥?

时间:2014-12-17 22:21:18

标签: ssh virtual-machine google-compute-engine ssh-keys

我是来自Amazon EC2世界的新Google Cloud试用用户,我对如何通过ssh登录新的Google Compute Engine VM实例感到困惑。

我通过Google Cloud网络控制台创建了一个新实例(如果重要的话,可以从CentOS 6.x映像中创建)。我在创建表单上看到一个空白,我可以粘贴现有的ssh密钥,但由于这是我的第一个实例,我还没有。我认为它会带我完成像Amazon EC2那样的密钥创建过程。它没有。它似乎已经创建了实例,但我无法弄清楚如何获取它的ssh密钥。实例网页上有一个按钮,上面写着" ssh"它让我通过一个模拟ssh会话的弹出式Web浏览器窗口进行简要登录。但是,它只允许我进入用户级帐户,而不是root。弹出窗口有一个菜单项来更改用户,我将其更改为" root"之后它只会产生连接错误,现在我根本无法登录我的实例。

我已经搜索过但无法找到解释谷歌计算实例这方面的任何直接文档。我已经搜索过Web控制台,但无法找到ssh密钥创建/选择机制,也无法创建或下载实例的密钥。

我是否必须在我的终端手动创建自己的ssh密钥并在创建过程中将其粘贴到表单中,或者是否还有其他一些显而易见的步骤?

8 个答案:

答案 0 :(得分:45)

默认情况下,新的Google Compute Engine(GCE)VM实例没有预先分配SSH密钥,因此您无法“检索”它们,因为它们不存在 - 您可以自行创建它们,或者使用像gcloud这样的工具(见下文),如果你还没有SSH密钥,它会提示你创建它们。

您可以通过多种方式连接到新创建的GCE VM。

一个选项是使用Developer Console GUI中的“SSH”按钮连接实例列表中的实例,这将打开浏览器窗口和实例的终端会话。

如果您想通过命令行上的SSH客户端进行连接,可以使用gcloud工具(Google Cloud SDK的一部分):

gcloud compute ssh example-instance

您可以在gcloud compute ssh帮助页面上看到完整的标记和选项,以及几个示例。

如果您还没有SSH密钥,它将提示您创建它们,然后连接到该实例。如果您已经拥有密钥,则可以使用现有的SSH密钥,它将传输到实例。

默认情况下,gcloud要求密钥位于以下路径:

  • $HOME/.ssh/google_compute_engine - 私钥
  • $HOME/.ssh/google_compute_engine.pub - 公钥

如果您要使用gcloud重新使用其他位置的密钥,请考虑使用符号链接或使用--ssh-key-file标记指向gcloud

注意:如果您根本不使用gcloud,则必须手动将SSH密钥添加到实例的元数据中,如Setting up ssh keys at the instance level中所述,您可以执行此操作通过gcloud或手动通过Google Cloud console

您还可以使用ssh-keygen创建自己的密钥,gcloud也将使用gcloud。您可以连接到实例using ssh directly而不是ssh -i KEY_FILE -o UserKnownHostsFile=/dev/null \ -o CheckHostIP=no -o StrictHostKeyChecking=no \ USER@IP_ADDRESS ,但您需要指定额外的参数来执行此操作:

KEY_FILE

将需要以下参数:

  • ~/.ssh/google_compute_engine - [必填]密钥存储在计算机上的文件,例如USER

  • gcloud compute - [必需]登录该实例的用户名。通常,这是运行IP_ADDRESS的本地用户的用户名。

  • {{1}} - [必需]实例的外部IP地址。

有关详细信息,请参阅SSH docs

答案 1 :(得分:6)

使用ssh登录到实例[[在Linux Ubuntu 16.04上执行的所有步骤]

  1. 在此处创建SSH密钥ssh-keygen -t rsa -f ~/.ssh/gcloud_instance1 -C varunon9 gcloud_instance1是密钥文件的名称,varunon9是用户名

  2. 打印公钥文件cd ~/.ssh && cat gcloud_instance1.pub

  3. 的内容
  4. 单击“编辑VM实例详细信息”图标enter image description here

  5. 将公共密钥文件的内容(cd ~/.ssh && cat gcloud_instance1.pub的输出)粘贴到ssh-keys文本区域中

    enter image description here enter image description here

  6. 单击“保存”

  7. 您现在可以从终端通过ssh ssh -i gcloud_instance1 varunon9@35.200.201.56登录到实例,其中gcloud_instance1是私钥文件(在.ssh目录中),varunon9是用户名,{{1 }}是您实例的外部IP。

答案 2 :(得分:1)

打开控制台后,尝试在ssh选项卡中查看gcloud命令。 gcloud客户端将使用以下命令打开。

gcloud computing --project ssh --zone

如果是第一次,它将为您创建ssh密钥。您只需要使用右上角的gcloud客户端下载文件选项,在此位置〜/ .ssh / google_compute_engine 中下载文件。拥有密钥文件后,只需发出

ssh -i username @ external_IP

答案 3 :(得分:1)

为多个实例创建和使用一对ssh密钥的最简单方法:

步骤1:https://putty.org/安装putty和puttyGen

步骤2:(在Windows 10及更高版本中,您使用Windows Linux子系统)在本地台式机/笔记本电脑中打开终端

类型:ssh-keygen

在提示符下输入文件名的名称:例如google_key

将创建2个文件google_key和google_key.pub

第3步:复制google_key.pub的全部内容

请注意,没有换行符。应该全部放在一行中。

步骤4::创建任何VM实例之前,请转到Compute Engine -> Metadata

选择“ SSH密钥”标签,然后单击“添加SSH”密钥

粘贴google_key.pub的内容。如果正确粘贴了内容,则应该看到 用户名 出现在左侧标签上。然后点击保存。

第5步::现在,在Google Computing下创建您喜欢的VM实例。

复制外部IP vm_instance_external_ip

回到您的Linux终端并输入

ssh -i google_key.pub 用户名 @ vm_instance_external_ip

输入“是”

现在你应该很好了。

如果您需要视频说明,请see here

答案 4 :(得分:0)

我发现了一个有用的按钮,有助于避免猜测不同gcloud参数(例如versionId,serviceId等)的猜谜游戏。

查看gcloud命令-> ssh screenshot

答案 5 :(得分:0)

概念很简单, 如果您拥有SSH私钥,则可以连接到上面给出的服务器答案,即@isma很简单

如此

  • 创建SSH密钥:Desktop-shell / GCP-sdk中的ssh-keygen会生成公共/私人密钥
  • 将公钥放入Gcloud Compute- SSH
  • 现在使用以下命令从desktop-shell / GCP-sdk连接 ssh -i google_key username @ vm_instance_external_ip

OR

使用腻子下载@Abubacker提到的私钥 然后打开腻子

  • 提供IP地址
  • 在SSH-Auth中打开私钥

答案 6 :(得分:0)

要在您的机器中填充 SSH 配置文件,请使用:

gcloud compute config-ssh

答案 7 :(得分:0)

对于想要将项目范围的 SSH 密钥添加到其 Google Cloud Platform (GCP) 项目的任何人,$GCP_PROJECT_NAME

  1. 生成基于 Ed25519 的 SSH 密钥:

    ssh-keygen -t ed25519 -C "$(whoami)@$(hostname)"
    
    #=>
    
    Generating public/private ed25519 key pair.
    Enter file in which to save the key (/. . ./.ssh/id_ed25519):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in id_ed25519.
    Your public key has been saved in id_ed25519.pub.
    The key fingerprint is:
    SHA256:. . . "$(whoami)@$(hostname)"
    The key's randomart image is:
    +--[ED25519 256]--+
    |      . . .      |
    +----[SHA256]-----+
    
  2. here 安装 Google Cloud SDK (gcloud)

  3. 确保您以正确的用户身份登录:

    gcloud config list --format="value(core.account)"
    

    如果没有,请登录:

    gcloud auth login
    
  4. 确保您通过以下方式连接到 $GCP_PROJECT_NAME

    gcloud config list --format="value(core.project)"
    

    如果没有,切换到$GCP_PROJECT_NAME

    gcloud config set project $GCP_PROJECT_NAME
    
  5. 利用可用于 filter()firstof()gcloud transforms 可以避免生成临时文件而只使用 单个< /strong> 命令将该 SSH 密钥添加到 $GCP_PROJECT_NAME

    gcloud compute project-info add-metadata \
    --metadata ssh-keys="$(gcloud compute project-info describe \
    --format="value(commonInstanceMetadata.items.filter(key:ssh-keys).firstof(value))")
    $(whoami):$(cat ~/.ssh/id_ed25519.pub)"
    
    #=>
    
    Updated [https://www.googleapis.com/compute/v1/projects/$GCP_PROJECT_NAME].
    
  6. 您现在应该$GCP_PROJECT_NAME 中看到基于 Ed25519 的 SSH 密钥;检查:

    gcloud compute project-info describe \
    --format="value(commonInstanceMetadata.items.filter(key:ssh-keys).firstof(value))"
    

使用 OpenSSH 将 shell 保护到计算虚拟机 (VM) 中非常简单:

  1. 为您希望保护外壳的 VM 找到外部 IP ($GCP_VM_ADDRESS):

    gcloud compute instances list \
    --format=table"[box=true](name:label=NAME, networkInterfaces[].accessConfigs[].natIP.flatten():label=EXTERNAL_IP)"
    
    #=>
    
    ┌──────────────┬─────────────────┐
    │     NAME     │  EXTERNAL_IP    │
    ├──────────────┼─────────────────┤
    │     . . .    │      . . .      │
    │ $GCP_VM_NAME │ $GCP_VM_ADDRESS │
    │     . . .    │      . . .      │
    └──────────────┴─────────────────┘
    

    注意:如果您尚未创建 VM,请务必按照说明 here 进行操作。

  2. 应该现在能够:

    ssh $(whoami)@$GCP_VM_ADDRESS