banner
约 1,200 字
4 分钟

SSH 密钥登录与安全加固教程:告别密码,更安全更省心

摘要

密码登录容易被暴力破解,改用 SSH 密钥登录既免密又安全。本教程依据 OpenSSH 官方手册,详细介绍 ssh-keygen 生成 Ed25519 密钥对、ssh-copy-id 上传公钥、测试登录,以及关闭密码登录、禁止 root 直连、修改默认端口等安全加固措施。

SSH 密钥登录与安全加固教程:告别密码,更安全更省心

SSH(Secure Shell)是远程登录服务器最常用的协议。默认情况下,很多人习惯用"密码登录",但密码很容易被暴力破解。改用密钥登录不仅能免密登录,安全性也大幅提升。

本文内容依据 OpenSSH 官方手册(ssh(1)sshd_config(5))整理。

一、SSH 登录的两种方式

  1. 密码登录:输入用户名 + 密码。简单,但存在被暴力破解的风险。

  2. 密钥登录:使用一对"私钥 + 公钥"进行认证。私钥留在自己电脑,公钥放到服务器上。登录时无需输密码,安全性更高。

推荐用密钥登录,并逐步关闭密码登录。

二、生成密钥对

你自己的电脑(客户端)上生成密钥对:

bash
ssh-keygen -t ed25519 -C "你的备注"

命令说明:

  • -t ed25519:使用 Ed25519 算法(现代、安全、密钥短,推荐)

  • -C "备注":加一段注释,方便辨认,通常写邮箱

执行后会提示:

  1. 保存路径:直接回车,默认保存到 ~/.ssh/id_ed25519

  2. 设置密码短语(passphrase):可以回车留空(免密),也可以设置一个密码短语增强私钥安全

如果你的服务器或客户端较老,不支持 Ed25519,可以用传统的 RSA:

bash
ssh-keygen -t rsa -b 4096 -C "你的备注"

生成后,~/.ssh/ 目录下会有两个文件:

  • id_ed25519私钥(务必保密,不要上传、不要发给任何人)

  • id_ed25519.pub公钥(可以公开,放到服务器上)

三、把公钥上传到服务器

使用 ssh-copy-id 一键把公钥安装到服务器(首次会要求输入一次服务器密码):

bash
ssh-copy-id user@服务器IP

执行后,公钥会被追加到服务器上对应用户的 ~/.ssh/authorized_keys 文件中。

如果你的服务器 SSH 端口不是默认 22,可以这样指定:

bash
ssh-copy-id -p 2222 user@服务器IP

如果系统没有 ssh-copy-id 命令,可以手动复制:把本地 id_ed25519.pub 的内容追加到服务器 ~/.ssh/authorized_keys 文件里。

四、测试密钥登录

上传完成后,直接 SSH 登录测试:

bash
ssh user@服务器IP

如果无需输入密码(或只需输入密钥的 passphrase)就登录成功,说明配置完成。

五、查看公钥内容

如果需要手动复制公钥,用下面的命令查看:

bash
cat ~/.ssh/id_ed25519.pub

输出的内容类似:

纯文本
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxx... 你的备注

把这一整行内容放进服务器的 ~/.ssh/authorized_keys 即可。

六、安全加固:修改服务器配置

登录服务器后,用 root 权限编辑 SSH 服务配置:

bash
sudo nano /etc/ssh/sshd_config

1. 关闭密码登录

找到(或添加)这一行:

纯文本
PasswordAuthentication no

设置成 no 后,只能通过密钥登录,彻底杜绝密码暴力破解。

2. 禁止 root 直接登录

纯文本
PermitRootLogin no

禁止 root 直接登录,日常用普通用户 + sudo 提权,更安全。

3. 修改默认端口(可选)

纯文本
Port 2222

把默认的 22 改成别的端口,可以避开大量自动扫描(改了之后登录要加 -p 2222)。

重要提醒:在关闭密码登录、禁止 root 登录之前,务必先确认你的密钥登录已经能正常使用,否则改完自己就登录不进去了。

修改完后保存,重启 SSH 服务使配置生效:

bash
# Debian / Ubuntu
sudo systemctl restart ssh

# CentOS / RHEL
sudo systemctl restart sshd

七、客户端简化登录(Config 文件)

如果经常登录同一台服务器,可以编辑本地 ~/.ssh/config,用别名简化登录:

纯文本
Host myvps
    HostName 服务器IP
    User user
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

之后只需输入:

bash
ssh myvps

即可一键登录。

八、总结

步骤

命令/配置

生成密钥

ssh-keygen -t ed25519 -C "备注"

上传公钥

ssh-copy-id user@IP

测试登录

ssh user@IP

关闭密码登录

PasswordAuthentication no

禁止 root 登录

PermitRootLogin no

密钥登录是服务器安全的第一步:用公钥私钥对替代弱密码,再配合关闭密码登录、禁止 root 直连,能让服务器的安全性提升一个档次。改配置前务必先确认密钥能正常登录,避免把自己锁在门外。

END

相关文章

暂无相关文章