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

文章目录

在本地生成密钥

在自己的电脑执行:

复制代码
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

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

相关推荐
用户03284722207010 小时前
如何搭建本地yum源(上)
运维
Aphasia3112 天前
VPN 与内网穿透
安全
Mr_愚人派3 天前
当"Claude"不再是 Claude:一次第三方 API 代理引发的 AI 身份伪造排查实录
人工智能·安全
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz3 天前
Maven依赖冲突
java·服务器·maven
DaLi Yao3 天前
【无标题】
人工智能·安全
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn863 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker