摘要
本文探讨如何在 Linux 为 SSH 服务器配置密钥认证登录。
引言
为了提高主机的安全级别,openssh 可以禁止用户以密码认证的方式登录。而使用基于密钥认证的方式登录。
准备
使用 vi 修改配置文件 /etc/ssh/sshd_config
禁止以密码认证的方式登录,即将 PasswordAuthentication
后面的 yes 改为 no。
PasswordAuthentication no
修改完配置文件后,使用以下命令重启 sshd 服务,使新的设置生效。
systemctl restart sshd
现在使用密码已经无法登录远程主机了。接下来,我们讲解如何为用户分配密钥并让用户以密钥验证的方式登录远程主机。
教程
当然,为用户分配密钥是系统管理的工作。并且,也只有系统管理员才有权限添加用户。
假如,你是系统管理员。现需要在系统中添加一名用户,让其能远程连接使用系统,新用户的各个属性如下:
- 用户名:stu
- 用户家目录:/home/stu
- 认证方式:密钥认证
- 首先,使用
useradd
命令添加用户
[root@centos ~]# useradd stu
- 然后,使用
su
命令切换到该用户。
[root@centos ~]# su - stu
- 接着,使用
ssh-keygen -t rsa
生成公私密钥对(所有选项都默认,直接回车即可)
[stu@centos ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/stu/.ssh/id_rsa):
Created directory '/home/stu/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/stu/.ssh/id_rsa.
Your public key has been saved in /home/stu/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:W6t6PMjrjEUUd9NVrFKcyijA5rxNi0hGnX6Ls/fEPII stu@centos
The key's randomart image is:
+---[RSA 2048]----+
| o... o. o.+.|
| . *o . .. + .|
| . =.. o o . |
| o.+ + . + . |
| o ..BS+. . |
| ..=.+= . |
| .E=o * |
| ++ =+ . |
| ..==.o. |
+----[SHA256]-----+
- 进入 stu 用户家目录的
.ssh
目录下,将公钥追加到 stu 用户指定的公钥文件authorized_keys
中,完成后将原公钥文件及时删除,并修改authorized_keys
的权限码为 400,即只有拥有者 stu 才能读。
[stu@centos ~]$ cd .ssh/
[stu@centos .ssh]$ cat id_rsa.pub >> authorized_keys
[stu@centos .ssh]$ rm id_rsa.pub
[stu@centos .ssh]$ chmod 400 authorized_keys
最后,将私钥文件通过安全的方式(例如邮件)发送给用户了。用户拿到私钥后,使用带有 SSH 的客户端就能以密钥认证的方式登录主机了。
下面我们以 Windows 客户端为例,讲解如何以密钥认证的方式登录远程主机。
- 用户获取到系统管理员发来的邮件后,下载 id_rsa 私钥,并将其放入用户家目录下的 .ssh 文件夹中(一般是
C:\Users\xxx\.ssh
),其中 xxx 是用户名 - 打开 CMD 终端,输入以下命令即可以密钥认真的方式自动登录。其中 host 为远程主机的 IP 地址。
ssh stu@host
参考
中国大学 MOOC | Linux 系统管理 | 主题 11 用好远程联机服务器 | 小节 2 为 SSH 服务器配置密钥认证登录