本文档介绍了如何为 Compute Engine 虚拟机 (VM) 实例创建 SSH 密钥对。
准备工作
-
设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
KEY_FILENAME
:您的 SSH 密钥文件的名称。例如,如果文件名为
my-ssh-key
,则系统会生成一个名为my-ssh-key
的私钥文件和一个名为my-ssh-key.pub
的公钥文件。USERNAME
:虚拟机上的用户名。例如cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。对于 Linux 虚拟机,除非您将虚拟机配置为允许 root 登录,否则
USERNAME
不能为root
。如需了解详情,请参阅以根用户身份连接到 Linux 虚拟机。对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在用户名前面加上格式为
DOMAIN\
的 AD 域。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的USERNAME
为example\cloudysanfrancisco
。WINDOWS_USER
:Windows 机器上的用户名。KEY_FILENAME
:您的 SSH 密钥文件的名称。例如,如果文件名为
my-ssh-key
,则系统会生成一个名为my-ssh-key
的私钥文件和一个名为my-ssh-key.pub
的公钥文件。USERNAME
:虚拟机上的用户名。例如cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。对于 Linux 虚拟机,除非您将虚拟机配置为允许 root 登录,否则
USERNAME
不能为root
。如需了解详情,请参阅以根用户身份连接到 Linux 虚拟机。对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在用户名前面加上格式为
DOMAIN\
的 AD 域。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的USERNAME
为example\cloudysanfrancisco
。下载
puttygen.exe
(如果您尚未下载)。打开 PuTTYgen。
在参数下,指定以下内容:
- 要生成的密钥的类型:
RSA
- 生成的密钥中的位数:
2048
或更多
- 要生成的密钥的类型:
点击生成并按照屏幕上的说明操作。
该工具会显示公钥值。
在密钥注释部分,将预先填充的文本替换为您的用户名。例如
cloudysanfrancisco
或cloudysanfrancisco_gmail_com
。对于 Linux 虚拟机,除非您将虚拟机配置为允许以根用户身份登录,否则密钥注释不能为
root
。如需了解详情,请参阅以根用户身份连接到 Linux 虚拟机。对于使用 Active Directory (AD) 的 Windows 虚拟机,必须在密钥注释前面加上 AD 域,格式为
DOMAIN\
。例如,ad.example.com
AD 中的用户cloudysanfrancisco
的密钥注释为example\cloudysanfrancisco
。可选:输入密钥口令,以使用密码保护您的密钥。
点击保存私钥,以选择保存私钥的位置。
PuTTYgen 将私钥写入扩展名为
.ppk
的文件中。点击保存公钥,以选择保存公钥的位置。让 PuTTYgen 窗口保持打开状态。
复制用于粘贴到 OpenSSH authorized_keys 文件的公钥字段中的文本。
打开公钥文件。公钥的格式类似于以下内容:
---- BEGIN SSH2 PUBLIC KEY ---- Comment: "USERNAME" KEY_VALUE ---- END SSH2 PUBLIC KEY ----
将公钥文件的全部内容替换为您从用于粘贴到 OpenSSH authorized_keys 文件的公钥字段中复制的值,从而使公钥文件匹配以下格式:
KEY_VALUE USERNAME
- 了解如何将 SSH 密钥添加到虚拟机
- 了解 SSH 连接在 Compute Engine 上的工作原理
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
创建 SSH 密钥对
如果您使用 Google Cloud 控制台或 Google Cloud CLI 连接到虚拟机,Compute Engine 会代表您创建 SSH 密钥。如需详细了解 Compute Engine 如何配置和存储密钥,请参阅关于 SSH 连接。
如果您使用第三方工具或 OpenSSH 连接到虚拟机,则需要先向虚拟机添加密钥,然后才能连接。如果您没有 SSH 密钥,则必须创建一个。虚拟机接受
sshd_config
文件中列出的密钥格式。Linux 和 macOS
在 Linux 和 macOS 工作站上,使用
ssh-keygen
实用程序创建新的 SSH 密钥对。以下示例会创建一个 RSA 密钥对。打开终端并使用带有
-C
标志的ssh-keygen
命令创建新的 SSH 密钥对。ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C USERNAME
替换以下内容:
ssh-keygen
将您的私钥文件保存到~/.ssh/KEY_FILENAME
,并将公钥文件保存到~/.ssh/KEY_FILENAME.pub
。用户
cloudysanfrancisco
的公钥类似于以下内容:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco
Windows 10 或更高版本
在使用 Windows 10 或更高版本的工作站上,使用
ssh-keygen
实用程序创建新的 SSH 密钥对。以下示例会创建一个 RSA 密钥对。打开命令提示符并使用带有
-C
标志的ssh-keygen
命令创建新的 SSH 密钥对。ssh-keygen -t rsa -f C:\Users\WINDOWS_USER\.ssh\KEY_FILENAME -C USERNAME
替换以下内容:
ssh-keygen
将您的私钥文件保存到C:\Users\WINDOWS_USER\.ssh\KEY_FILENAME
,并将公钥文件保存到C:\Users\WINDOWS_USER\.ssh\KEY_FILENAME.pub
。用户
cloudysanfrancisco
的公钥类似于以下内容:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco
Windows 8 或更早版本
在使用 Windows 8 或更早版本的工作站上,使用 PuTTYgen 工具创建新的 SSH 密钥对。以下示例会创建一个 RSA 密钥对。
用户
cloudysanfrancisco
的公钥类似于以下内容:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-09-05。
[{ "type": "thumb-down", "id": "hardToUnderstand", "label":"Hard to understand" },{ "type": "thumb-down", "id": "incorrectInformationOrSampleCode", "label":"Incorrect information or sample code" },{ "type": "thumb-down", "id": "missingTheInformationSamplesINeed", "label":"Missing the information/samples I need" },{ "type": "thumb-down", "id": "translationIssue", "label":"翻译问题" },{ "type": "thumb-down", "id": "otherDown", "label":"其他" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"易于理解" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"解决了我的问题" },{ "type": "thumb-up", "id": "otherUp", "label":"其他" }] -