介绍
在客户端-服务器架构中,使用 SSH 协议可以在不安全的网络上建立安全通道,从而连接 SSH 客户端和 SSH 服务器。创建 SSH 密钥集会生成一个公钥和一个私钥。您可以将公钥放在服务器上,然后使用拥有相应私钥的客户端连接到该服务器。如果 SSH 公钥和私钥匹配,您无需密码即可登录。.
这通常是最安全、最便捷的连接方式。.
本指南解释了如何在本地计算机上配置 SSH 密钥,以便与远程服务器建立安全连接。.
先决条件
- 访问 OVHcloud 控制面板
- OVHcloud 账户上的专用服务器或 VPS
- SSH客户端程序(命令行或图形用户界面)
- 通过 SSH 对您的服务器进行管理(sudo)访问
本指南不适用于标准 Windows Server 安装,因为它们依赖远程桌面协议 (RDP) 进行连接。OVHcloud 救援模式使用 SSH 连接。您可以在本指南的“了解更多”部分找到更多信息。.
创建 SSH 密钥对
以下说明涵盖了使用 SSH 密钥的两种方法:
- 创建 OpenSSH 密钥对并从 SSH 命令行客户端连接到服务器
- 创建 PuTTY 密钥对并从 PuTTY SSH 客户端连接到服务器
您可以同时使用这两种方法,但请注意,PuTTY 以特定格式保存密钥文件,这使得它们与使用 OpenSSH 客户端创建的 SSH 密钥文件不兼容。这意味着使用 SSH 命令行客户端创建的私钥必须先转换为 PuTTY 格式,反之亦然。.
通过命令行创建 SSH 密钥对
在 Mac 电脑或安装了 Linux 操作系统的设备上,打开命令行应用程序(终端)。.
请检查您的 $HOME 目录下是否存在名为 .ssh 的文件夹。如果该文件夹不存在,请创建它:
mkdir ~/.ssh
在当前的 Windows 操作系统中,通过在搜索栏中键入“cmd”来打开命令提示符(或者从菜单中打开 PowerShell)。.
转到当前 Windows 用户对应的 .ssh 目录(默认位置:C:\Users\WindowsUsername\.ssh):
cd .ssh要生成 4096 位 RSA 密钥,请使用以下命令:
ssh-keygen -b 4096
使用此命令的 -t 选项可以指定不同的加密方法,例如:
ssh-keygen -t ed25519 -a 256
命令行会提示您将新创建的密钥保存到标准文件中:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):您可以按 Enter 键确认接受建议的文件名,也可以输入自定义文件名。如果 .ssh 目录中放置了多个密钥对,则此操作尤为重要。您可以在“管理多个 SSH 密钥”部分找到更多相关信息。.
本示例使用标准文件名 id_rsa 和 id_rsa.pub。.
在下一个提示中,您可以使用密码短语保护您的 SSH 密钥。建议这样做以提高安全性。.
远程访问服务器的安全性取决于存储私钥的客户端设备的安全性。因此,使用 SSH 密钥时,保护您的设备和文件免受未经授权的访问至关重要。.
为了方便和安全起见,请在您的设备上使用密码管理器,例如开源解决方案 KeePass。.
所有SSH密钥都应存储在.ssh文件夹中。公钥文件的文件名中会带有.pub后缀。.
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:MRk+Y0zCOoOkferhkTvMpcMsYspj212lK7sEauNap user@hostname
The key's randomart image is:
+---[RSA 4096]----+
| .. o |
| . .= o |
| o o X |
|. . . . |
|. .=.o .S. |
| =o.o. . . |
|o + . . o .. |
|.. . . oEoo . |
|o. .o+oo |
+----[SHA256]-----+要查看和导出您的公钥,请使用 cat 命令打开 pub.key 文件。将完整的密钥字符串复制到剪贴板,以便稍后将其添加到您的服务器。.
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8teh2NJ42qYZV98gTNhumO1b6rMYIkAfRVazl
k6dSS3xf2MXJ4YHsDacdjtJ+evXCFBy/IWgdkFtcvsGAMZ2N1RdvhDyQYcy6NDaJCBYw1K6Gv5fJ
SHCiFXvMF0MRRUSMneYlidxUJg9eDvdygny4xOdC6c1JrPrSgOc2nQuKeMpOoOWLINIswg1IIFVk
kFMPrFivP8Z6tidzVpAtbr1sXmJGZazYWrU3FoK2a1sF1zEWrmlMOzX81zEWrmlMOzX8CpZW8Rae
i4ANmLy7NULWK36yU0Rp9bFJ4o0/4PTkZiDCsK0QyHhAJXdLN7ZHpfJtHIPCnexmwIMLfIhCWhO5
user@hostname在 macOS 终端中,您可以使用 pbcopy 和 pbpaste 命令来更快速地管理密钥字符串。例如,使用以下命令将密钥从 id_rsa.pub 文件复制到剪贴板:
pbcopy < ~/.ssh/id_rsa.pub
在 Windows 系统中,您可以从文件资源管理器中使用记事本打开该文件(右键单击该文件并选择“打开方式”),或者使用以下命令之一(位于 \Users\WindowsUsername\.ssh 文件夹中):
命令
more id_rsa.pub
PowerShell
cat id_rsa.pub
将完整的密钥字符串复制到剪贴板,以便稍后将其添加到您的服务器。.
使用剪贴板
在 Windows 命令提示符窗口中,右键单击即可将剪贴板内容粘贴到命令提示符窗口中。要从命令提示符窗口复制字符串,请选中该字符串,然后按 Enter 键。您也可以通过右键单击菜单栏找到这些功能。.
使用 PuTTY 创建 SSH 密钥对
PuTTY 是一款开源的 SSH 客户端软件,具有图形用户界面,适用于 Windows 和其他操作系统。它还提供了一个用于生成 SSH 密钥的配套软件:PuTTY 密钥生成器 (PuTTYgen)。.
PuTTY 的主要用途是管理从 Windows 客户端到 GNU/Linux 服务器的 SSH 连接。PuTTY 以特定格式存储密钥文件,这使得它们与大多数现代操作系统自带的 OpenSSH 客户端创建的 SSH 密钥文件不兼容。.
如有必要,可将上述命令行生成的密钥转换为 PPK 格式,以便与 PuTTY 客户端配合使用。为了更方便地使用 SSH 密钥,建议选择一种方式并坚持使用(SSH 私钥或 PuTTY 私钥)。.
如果尚未安装 PuTTY(请查看程序列表或使用搜索功能),请从官方网站下载。推荐的标准安装包包含 PuTTYgen,但您也可以从网站上单独下载 PuTTYgen 文件。.
打开 PuTTYgen 并选择一个受支持的加密算法。本例使用 RSA 算法。在右下角输入 4096 作为位数,然后单击“生成”按钮。.
将鼠标指针自由移动到进度条下方的区域:
进度条填满后,钥匙就准备好了。.
将完整的密钥字符串复制到剪贴板,以便将其添加到您的服务器。单击相应的按钮将两个密钥保存为文件,并输入密码短语来保护它们。.
远程访问服务器的安全性取决于存储私钥的客户端设备的安全性。因此,使用 SSH 密钥时,保护您的设备和文件免受未经授权的访问至关重要。.
为了方便和安全起见,请在您的设备上使用密码管理器,例如开源解决方案 KeePass。.
使用 PuTTY 的优势之一是能够将多个连接保存为会话。更多信息请参见下文“在本地计算机上管理多个 SSH 密钥”部分。.
您可以在我们的入门指南和 SSH 简介中了解更多关于 SSH 连接的信息。.
向服务器添加 SSH 密钥
传输在基于 GNU/Linux、MacOS 或 BSD 的系统上创建的公钥
如果您在基于 GNU/Linux、MacOS 或 BSD 的系统上创建了 SSH 密钥对,则可以使用 ssh-copy-id 命令将公钥添加到您的服务器。.
ssh-copy-id 工具会将公钥复制到指定远程服务器上的 ~/.ssh/authorized_keys 文件中,如有必要,会自动在该目录中创建该文件。.
ssh-copy-id user@IP_ADDRESS默认情况下,ssh-copy-id 会尝试将所有公钥移动到本地用户的 ~/.ssh 目录中。要添加公钥,您可以使用 -i 选项指定密钥文件,后跟文件路径:
ssh-copy-id -i ~/.ssh/KeyFileName user@IP_ADDRESS
例子:
ssh-copy-id -i ~/.ssh/VPS_rsa.pub [email protected]
系统将提示您输入用户密码。如果过程成功,您将收到类似于下图的消息。.
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'user@server-ip'"
and check to make sure that only the key(s) you wanted were added.如果出现错误信息,您可以按照以下步骤手动添加公钥。.
出于最佳实践和安全考虑,同一密钥对不应被多个用户使用。由于 GNU/Linux 系统上的每个用户在 ~/.ssh/ 目录下都有自己的 authorized_keys 文件,因此您可以使用如上所示的 ssh-copy-id 命令,并在创建密钥对后将 KeyFileName 与用户匹配。.
手动向服务器添加公钥
连接到您的服务器,并确保您位于用户的 $HOME 目录中。创建 .ssh 文件夹(如果不存在):
mkdir ~/.ssh
要存储当前用户的密钥,请使用您喜欢的文本编辑器(本例中使用的是 nano)打开(或创建)authorized_keys 文件:
nano ~/.ssh/authorized_keys
将您的公钥放入此文件中。保存文件并退出编辑器。重启服务器(sudo reboot)或使用以下命令之一重启 OpenSSH 服务(具体命令可能因操作系统而异):
sudo systemctl restart ssh
sudo systemctl restart sshd
为确保密钥设置正确,请使用以下命令连接到服务器。将«user»替换为创建密钥时使用的用户名,将«IP_ADDRESS»替换为要访问的服务器的 IP 地址(或主机名):
ssh user@IP_ADDRESS
例子:
向服务器添加其他公钥
要为其他有权访问服务器的用户添加 SSH 密钥,请重复密钥创建步骤,但使用目标用户的相应 $HOME 文件夹或 Windows 用户目录来创建和存储 SSH 密钥(或在该用户的专用计算机上运行命令)。然后,按照上述 authorized_keys 中的说明,将新的公钥添加到服务器。.
从服务器中删除公钥
按照上述说明打开 authorized_keys 文件,并删除已被撤销访问权限的用户的密钥字符串。.
保存文件并退出编辑器。.
在本地计算机上管理多个 SSH 密钥
您可能需要使用多个 SSH 密钥对来连接到不同的远程主机。(如果您使用的是 PuTTY,请跳至下面的相关部分。)
由于所有密钥都必须放在本地计算机的 .ssh 文件夹中,因此文件名必须不同。创建新密钥对并提示输入文件名时,请输入您选择的名称。例如,您可以将其与您的服务器名称匹配。.
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): KeyFileName_rsa
Your identification has been saved in /home/user/.ssh/KeyFileName_rsa.
Your public key has been saved in /home/user/.ssh/KeyFileName_rsa.pub.连接到相关服务器时,除了用户和服务器详细信息外,还要指定密钥文件的名称:
ssh -i ~/.ssh/KeyFileName user@IP_ADDRESS
例子:
ssh -i ~/.ssh/myVPS_rsa [email protected]
如前几节所述,同样的操作也适用于 Windows 客户端。只需将 ~/ 替换为您的 Windows 用户文件夹路径,默认路径为 C:\Users\WindowsUsername\。(例如:ssh -i C:\Users\Username\.ssh/myVPS_rsa [email protected])
使用“config”文件。.
无需每次编辑 ~/.ssh 文件夹(Windows 系统为 \Users\用户名\.ssh)中的 config 文件时都添加 -i 选项,您可以使用此方法配置不同连接的详细信息(用户名、端口、密钥文件、可选参数等)。.
如果 .ssh 目录下存在此文件,则它可能已经包含信息。根据您的环境,请先创建原始文件的备份。.
.ssh 文件夹内容示例:
ls ~/.ssh/
config id_rsa id_rsa.pub known_hosts known_hosts.old
通过配置文件,除了标准值之外,还可以存储多个 SSH 连接及其各自的参数。充分利用此文件的功能可能比较棘手,因为它对经常管理多台服务器的经验丰富的用户非常有用。.
下面举一个简单的例子来说明如何配置到 VPS 的 SSH 连接。.
打开文件,并在顶部添加以下几行:
Host vps
HostName 203.0.113.100
IdentityFile ~/.ssh/myVPS_rsa然后,您可以使用定义为 Host 的别名连接到 VPS:
ssh ubuntu@vps
前面的示例中只指定了服务器 IP 地址和密钥文件,但还可以添加更多详细信息。要配置与第二个服务器的 SSH 连接,用户名为“rocky”,SSH 端口已更改为“49160”,私钥位于文件“myserver_rsa”中,请按如下示例所示展开文件内容:
Host vps
HostName 203.0.113.100
IdentityFile ~/.ssh/myVPS_rsa
Host dedicated_server
HostName 203.0.113.101
User rocky
Port 49160
IdentityFile ~/.ssh/myserver_rsa然后您可以通过输入以下命令连接到此服务器:
ssh dedicated_server更多信息,请阅读相关手册页。.
使用 PuTTY
如果您按照“使用 PuTTY 创建 SSH 密钥对并将 SSH 密钥添加到服务器”部分中的说明进行操作,那么您就拥有了一个可以用来连接到服务器的密钥对。.
PuTTY 可以将 SSH 连接的凭据和参数存储为会话 (Session)。这还允许您使用不同的密钥连接到不同的服务器。.
打开 PuTTY,展开左侧菜单中的 SSH 子部分,然后单击“身份验证和凭据”。.
点击“浏览”按钮,从您保存的文件夹中选择 PuTTY 私钥文件 (keyfile.ppk)。.
密钥文件现已与当前 SSH 会话关联。请转到左侧菜单中的“会话”,然后输入您的服务器登录凭据(用户名@IPv4 地址)。.
在“已保存的会话”字段中输入此连接的名称,然后单击“保存”将其添加到列表中。.
从现在开始,您可以点击此会话项并打开与服务器的连接。点击“打开”进行测试。如果您已使用密码保护密钥文件,则需要在此处输入密码。.
要配置另一个服务器连接,请重复以下步骤:
- 创建密钥对。.
- 将公钥添加到您的服务器。.
- 在 PuTTY 中输入服务器详细信息并添加密钥文件。.














