提高服务器安全-采用密钥公钥登录而非密码登录-详细操作步骤

文章目录

在本地生成密钥

在自己的电脑执行:

复制代码
ssh-keygen -t ed25519

一路回车(也可以设置密码)

会生成:

私钥:~/.ssh/id_ed25519

公钥:~/.ssh/id_ed25519.pub

手动复制公钥

查看你的公钥

在 PowerShell 输入:

复制代码
type $env:USERPROFILE\.ssh\id_ed25519.pub

或者输入:

复制代码
cat ~/.ssh/id_ed25519.pub

或者输入:

bash 复制代码
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub

这三个爱用哪个用哪个。

会输出一行类似:

复制代码
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... 乱七八糟的乱码

复制整行。

登录服务器(用密码)

复制代码
ssh user@服务器IP

在服务器上执行

复制代码
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys

把刚才复制的内容粘进去,如果发现无法复制,可以尝试点击第一个空行,然后再复制,注意,是第一个空行,而非整个空白区域。

保存:

复制代码
Ctrl + O → 回车
Ctrl + X

设置权限:

bash 复制代码
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

测试登录

退出服务器:

bash 复制代码
exit

再登录:

bash 复制代码
ssh user@服务器IP

如果不用密码直接进 = 成功,如果你设置了密钥的密码,就会提示你输入passphrase。

关闭密码登录

编辑 SSH 配置:

bash 复制代码
nano /etc/ssh/sshd_config

找到并修改这两行:

搜索,按:

bash 复制代码
Ctrl + W

输入:

bash 复制代码
PasswordAuthentication

如果你看到:

bash 复制代码
#PasswordAuthentication yes

改成(去掉 #):

bash 复制代码
PasswordAuthentication no

这个表示禁止密码登录。

再搜索 root 登录

按:

bash 复制代码
Ctrl + W

输入:

bash 复制代码
PermitRootLogin

如果看到:

bash 复制代码
#PermitRootLogin prohibit-password

改成:

bash 复制代码
PermitRootLogin prohibit-password
(如果没有这一行,就自己加一行)

这个表示root 只能用密钥登录,不能用密码。

保存并退出

按:

bash 复制代码
Ctrl + O   (保存)

回车

bash 复制代码
Ctrl + X   (退出)

重启 SSH 服务

执行:

bash 复制代码
systemctl restart ssh

如果你是CentOS/RHEL之类的,执行:

bash 复制代码
systemctl restart sshd

检查配置是否生效

执行:

bash 复制代码
sshd -T | grep passwordauthentication

如果输出:

bash 复制代码
passwordauthentication yes

说明密码登录还在开启。

如果前面怎么改都不行的话,主配置可能被覆盖了,真正生效的配置,可能在 /etc/ssh/sshd_config.d/ 目录里。

查看这个目录

执行:

bash 复制代码
ls /etc/ssh/sshd_config.d/

查看里面的内容

bash 复制代码
cat /etc/ssh/sshd_config.d/*.conf

如果看到了:

bash 复制代码
PasswordAuthentication yes

那就对胃了。

直接改这个文件:

bash 复制代码
nano /etc/ssh/sshd_config.d/50-cloud-init.conf

把里面的:

bash 复制代码
PasswordAuthentication yes

改成:

bash 复制代码
PasswordAuthentication no

重启 SSH

bash 复制代码
systemctl restart ssh

再验证

bash 复制代码
sshd -T | grep passwordauthentication

这次应该是:

bash 复制代码
passwordauthentication no

一般这种情况是Ubuntu,特别是云服务器,常见。使用 cloud-init 自动生成配置,放在/etc/ssh/sshd_config.d/优先级比主文件还高,配置被"隐藏配置文件"覆盖了

验证一下

不要马上断开当前连接,先开一个新窗口测试:

bash 复制代码
ssh root@你的服务器IP

如果能正常登上去,就可以断开链接了

相关推荐
AOwhisky37 分钟前
Linux(CentOS)系统管理入门笔记(第二十一期)——防火墙管理(Firewalld)——zone、服务端口、富规则与端口转发
linux·运维·笔记·安全·centos·防火墙
腾飞开源1 小时前
01_K8s干货笔记之认识K8s
运维·笔记·云原生·容器·kubernetes·k8s·容器化部署
tg_xianheyun7 小时前
CDN节点分布如何影响网页加载速度和用户体验
服务器·cdn加速·全球访问优化
lsh曙光7 小时前
延时at指令和定时cron指令
linux·服务器·网络
笨鸟先飞,勤能补拙7 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
布鲁飞丝7 小时前
vivo Pulsar 万亿级消息处理实践()-Ansible运维部署
运维·ansible
XR1234567888 小时前
企业全光网络架构选型技术白皮书:从物理层到运维层的全链路分析
运维·网络·架构
加密狗复制模拟8 小时前
使用x64dbg进行超级狗super dog 加密狗逆向分析复制 超级狗克隆备份
安全·软件工程·个人开发·同态加密
HiDev_8 小时前
【非标自动化】2、认识元器件(直线模组)
运维·自动化
ZeroNews内网穿透8 小时前
内网部署企业知识库,通过 HTTPS 隧道实现异地安全访问
安全·内网穿透