SSH 使用密钥文件登录 Linux 服务器

Eric 教程 3,097 次浏览 评论已关闭

平时在 SSH 登录服务器后,经常会看到有多少次登录失败尝试的提示。这些大多是网上自动扫描破解器弄的,密码弱的很容易中招。要解决这个问题,除增加密码强度外。更好方法是采用密钥对认证方式。

要启用密钥文件登录方式,首先需创建密钥对,然后在 Linux 服务器端配置公钥,之后便可通过私钥文件登录。下面介绍具体配置流程。

创建 SSH 密钥对文件

在 Linux 系统上创建

大多 Linux 发行版系统自带 OpenSSH 软件,可以很方便地生成密钥对。

1. SSH 登录服务器,运行 ssh-keygen -t rsa -b 4096 命令生成密钥。接着提示选择密钥存储目录,直接按 Enter 键使用默认目录。

# ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

2. 提示是否为私钥文件设置保护密码(设置后 SSH 登录除了验证私钥文件,还需输入密码,等于二重认证)。如果不设置则直接 Enter 两次。

Enter passphrase (empty for no passphrase): 
Enter same passphrase again:

3. 显示密钥生成结果,文件存储在 /root/.ssh/ 目录下,id_rsa 是私钥文件,id_rsa.pub 是公钥文件。使用 SFTP 工具下载到本地保存。或直接用 cat 命令查看文件内容,复制到记事本保存(避免使用 .doc 文档存储,字符问题可能导致内容错误)。之后删除在服务器上的密钥文件。

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:FNljtsS/cQueU3plPIPgQIwDMupDSMqHEHyuJzxFDW4 root@vpsuse
The key's randomart image is:
+---[RSA 4096]----+
|+o +o.. ==       |
|*.+oo. o.+B.     |
|o=+E    o+o+. .. |
|o oo   .  ..+.oo+|
|.oo     S  . O +o|
| =..        * o  |
|  +          o   |
|                 |
|                 |
+----[SHA256]-----+

在 Windows 系统上创建

如果希望在 Windows 电脑上生成,需要额外下载软件,例如 PuTTYgen

1. 运行 puttygen.exe,选择 SSH-2(RSA) 类型密钥,密钥长度调至 4096,点击 Generate 生成。

设置密钥参数

2. 密钥生成过程中,需将鼠标移至软件空白区域反复移动,以产生随机数据。

移动鼠标获取随机数据

3. 生成密钥后,可以选择为其设置保护密码,然后导出密钥文件备用。

导出密钥文件

Linux 服务器端配置公钥

SSH 登录服务器,用下面命令创建公钥文件。将之前生成的公钥文件内容复制进去保存。

mkdir ~/.ssh && vi ~/.ssh/authorized_keys

然后为公钥目录和密钥文件设置合适权限。

chmod 700 -R ~/.ssh && chmod 600 ~/.ssh/authorized_keys

到此,应该就能使用密钥文件登录服务器了。之后可考虑关闭密码认证方式(关闭前建议先验证密钥文件登录是否正常,以免因意外情况无法登录服务器)。

关闭 SSH 密码认证方法:编辑 vi /etc/ssh/sshd_config 配置文件,将 PasswordAuthentication 参数改为 no,systemctl restart sshd 重启 sshd 服务即可生效。

SSH 设置密钥文件登录

下面以 Xshell 客户端为例。修改 SSH 会话属性,将用户身份验证方式改为 Public Key。

SSH 客户端设置密钥认证

如果你使用的是 PuTTY 客户端,则可以参考这篇文章设置。