密钥相对于密码更加安全,特别是对于VPS管理员来说,强烈推荐禁止密码登陆,而是使用密钥登录。理论上只要保护好你的私钥,黑客是无法破解你的系统的。
实验环境
服务器:AlmaLinux 8
客户端:Windows 11
SSH客户端:MobaXterm 21.1
使用的用户:root
生成密钥对
首先使用ssh-keygen生成一对公钥和密钥,本来我以为Windows 11已经内置了ssh和scp程序,后来一想估计是随着Git一起安装的。
MobaXterm等SSH客户端一般都带有图形化的密钥生成器。
打开Windows命令行终端,进入 D:Download 目录(其它目录也一样),输入以下命令
ssh-keygen -t rsa -b 4096 -f almalinux
选项 |
含义 |
t |
密钥类型 |
b |
密钥长度 |
f |
密钥文件名称 |
不出意外,在D:Download下生成了两个文件:
almalinux:私钥,千万不要泄露给别人
almalinux.pub:公钥,这个一会要上传到服务器
下面是命令执行过程
D:Download>ssh-keygen -t rsa -b 4096 -f almalinux
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): // 直接Enter
Enter same passphrase again: // 直接Enter
Your identification has been saved in almalinux
Your public key has been saved in almalinux.pub
The key fingerprint is:
SHA256:P9mkIGGkuXeaLh9/Q51Hd2zI4jsPqQR8mwBWg4yQppc jupiter@HomePC
The key's randomart image is:
+---[RSA 4096]----+
| .o o..o |
| o .+o. . |
| o .o = . o |
|. E + + . + =|
| . . o S .o.+ o.|
| . = *.B+.. |
| + .O +o |
| .. o .ooo. |
| oo .... o. |
+----[SHA256]-----+
将公钥上传到服务器
首先检查一下服务器root用户家目录是否有.ssh目录,如果没有则创建一个.ssh目录。
mkdir ~/.ssh
在Windows 11命令行工具中使用scp命令或者图形化工具MobaXterm将公钥传到服务器的.ssh目录中。
scp d:Downloadalmalinux.pub root@192.168.64.129:.ssh/almalinux.pub
备注:虽然最佳实践是不使用root登录服务器,不过对于个人用户来说,我感觉直接使用并没有什么不妥,当然前提是做好各种安全工作,例如本文的内容。
C:Usersjupiter>scp d:Downloadalmalinux.pub root@192.168.64.129:.ssh/almalinux.pub
The authenticity of host '192.168.64.129 (192.168.64.129)' can't be established.
ED25519 key fingerprint is SHA256:gpFxIiaTLM329RAIk+SjJkWP1l8WZ5x0TbEmMAOi96o.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? // 这里输入完整的yes
Warning: Permanently added '192.168.64.129' (ED25519) to the list of known hosts.
root@192.168.64.129's password: // 这里输入root用户的密码
almalinux.pub 100% 741 368.7KB/s 00:00
C:Usersjupiter>
将公钥附加到authorized_keys文件的后面,注意是附加 >>。这里千万不要写成了 > ,那样还会覆盖authorized_keys文件的内容。
touch ~/.ssh/authorized_keys
cat ~/.ssh/almalinux.pub >> ~/.ssh/authorized_keys
现在,你可以使用密钥登录你的服务器了。这里以MobaXterm为例:
点击Advanced SSH settings标签页,勾选 Use private key,然后选择 D:Downloadalmalinux 文件。点击OK。
登录成功页面
加固服务器
由于我们要修改SSH监听端口号,因此在加固之前,首先要放行这个端口,否则改变了端口却无法登陆,那就悲催了。这里直接给出关闭selinux和防火墙的方法。
// 检查selinux状态
[root@almalinux ~]# getenforce
Enforcing
// 关闭selinux
[root@almalinux ~]# vi /etc/selinux/config
SELINUX=disabled
//关闭防火墙
[root@almalinux ~]# systemctl disable firewalld --now
// 重启服务器
reboot
重点来了,为了最大程度的保证服务器安全,除了为root设置一个高强度密码以外,还需要:
- 禁止密码登陆
- 修改端口号
这些设置保存在/etc/ssh/sshd_config配置文件中,修改方法如下所示:
vi /etc/ssh/sshd_config
PermitRootLogin yes
RSAAuthentication yes # 启用 RSA 认证,默认为yes
PubkeyAuthentication yes # 启用公钥认证,默认为yes
PermitRootLogin yes #允许root登录,也可以禁用,根据你的喜好
PasswordAuthentication no #禁止密码登录,推荐
Port 65123 # 修改端口号
重启ssh服务
service sshd restart
修改完成之后,注意不要关闭当前的SSH会话,而是新开一个使用密钥登录服务器的会话,看看是否可以成功登录,如果登录成功则万事大吉,否则寻找错误解决问题,直到登录成功。
评论前必须登录!
注册