使用 SSH 密钥进行连接
使用 SSH 密钥访问服务器可以提高安全性(降低账户被破解的风险)并增加便利性(连接时无需每次输入密码)。
配置密钥认证的过程包括在本地计算机上创建密钥,然后将其复制到服务器。
在创建新的 VDS 或重装系统时,也可以通过管理面板完成密钥向服务器的传输。此外,密钥可以存储在管理面板中,以便后续创建服务器时使用。
Linux, MacOS, Windows 10
创建 SSH 密钥
此过程适用于 Linux、MacOS 以及 1809 版本及以上的 Windows 10,因为它们内置了 SSH 客户端。对于较早版本的 Windows,请参考“旧版 Windows(不含 OpenSSH)”指令。
在您的计算机上启动终端或 Windows PowerShell 并执行命令:
ssh-keygen
您将看到以下消息:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
只需按下 Enter 键 —— 密钥将保存到显示的默认目录中。
接着系统会提示您为密钥设置密码(密码短语)。您可以设置密码,也可以直接按 Enter 键留空。请注意,如果设置了密码短语,则每次使用密钥登录时都需要输入该密码。
密钥创建程序已完成,密钥保存在 ~/.ssh/ 目录中,文件名为 id_rsa 和 id_rsa.pub。现在需要将公钥复制到服务器。
将密钥复制到服务器
在终端执行以下命令,将 user 替换为服务器上的用户名,将 server 替换为服务器的 IP 地址:
ssh-copy-id user@server
# 示例:ssh-copy-id admin@2.59.43.145
公钥文件 id_rsa.pub 的内容将被复制到服务器上的 ~/.ssh/authorized_keys 文件中。之后,您可以使用以下命令连接服务器:
ssh user@server # 示例:ssh admin@2.59.43.145
旧版 Windows(不含 OpenSSH)
如果您使用的是不含 OpenSSH 的旧版本 Windows,则需要 PuTTYgen 程序。您可以从 PuTTY 官方网站 下载它。
使用 PuTTYgen 创建 SSH 密钥
- 启动程序,在“Type of key to generate”部分选择 RSA 类型,然后点击“Generate”。
- 在窗口内随机移动鼠标以生成随机数据。
- 密钥生成后,您可以设置“Key passphrase”(密钥密码)。这是可选的,您可以留空。如果您设置了密码,每次使用密钥登录时都会被要求输入。
- 点击“Save public key”和“Save private key”保存生成的密钥,建议命名为 id_rsa.pub 和 mykey.ppk。
- 同时复制“Public key for pasting…”窗口中的内容并将其保存在文本文件中。在将密钥复制到服务器时会用到它。
至此,密钥创建程序完成。
使用 Pageant 将密钥复制到服务器
复制密钥需要用到 Pageant。您可以从 PuTTY 官方网站 下载它。
- 通过 SSH 连接到服务器,执行以下命令在服务器上创建存储密钥的目录和文件:
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
- 使用文本编辑器打开 ~/.ssh/authorized_keys 文件:
nano ~/.ssh/authorized_keys
- 将您之前从 PuTTYgen 复制的公钥内容粘贴到文件中并保存。
- 启动 Pageant —— 其图标将出现在系统托盘中。右键点击并选择“Add Key”。
- 在打开的窗口中,指定您之前保存的私钥 mykey.ppk 的路径,然后点击“Open”。如果您在创建密钥时设置了密码,Pageant 会在此步骤要求输入。
- 要检查密钥认证是否正常工作,请再次运行 PuTTY,连接到服务器并输入您的用户名。如果一切配置正确,您将在控制台窗口看到类似的消息:
Authenticating with public key "rsa-key-20151220" from agent
禁用密码访问
为了允许仅通过密钥访问服务器,您必须禁用密码认证。为此,请修改 /etc/ssh/sshd_config 文件。
- 使用以下命令打开文件:
sudo nano /etc/ssh/sshd_config
- 找到 PasswordAuthentication 行并将其更改为:PasswordAuthentication no。
- 保存更改并重启 SSH 服务:
sudo service ssh restart
如果执行这些操作后仍提示输入密码,请检查 /etc/ssh/sshd_config.d/ 目录中是否存在包含 PasswordAuthentication yes 指令的 50-cloud-init.conf 文件。如果该文件存在,请将其删除并重启 SSH 服务。