SSH密钥登录:VPS安全加固第一步,告别密码烦恼

概述

每个VPS用户的第一件事都是学会SSH登录。大多数人用密码,但密码有个致命问题——容易被暴力破解。黑客扫描全球开放的22端口,用字典爆破,你的密码再复杂也挡不住每秒几百次的尝试。

SSH密钥登录就是解决方案。它用一对非对称密钥,公钥放在服务器,私钥留在你的电脑。密码长度至少32位才算安全,而SSH密钥等效安全强度是256位。更重要的是,配置好之后再也不用记密码了。

准备工作

一台Linux VPS(CentOS、Ubuntu、Debian都行)

你本地电脑的终端(Mac/Linux自带,Windows用Git Bash或PowerShell)

能先用密码登录VPS的权限

网络畅通

步骤一:生成SSH密钥对

在你自己的电脑上打开终端,运行:

ssh-keygen -t ed25519 -C "your_email@example.com"

直接回车选择默认路径(~/.ssh/id_ed25519)。Ed25519是目前最推荐的算法,比传统的RSA更快更安全。密钥对生成后,你的电脑里就有两个文件:私钥(id_ed25519)和公钥(id_ed25519.pub)。

注意:设置密码 passphrase 可选,但强烈建议设置。这样就算私钥文件泄露,别人没有passphrase也无法使用。

步骤二:把公钥上传到服务器

最省事的方法用 ssh-copy-id:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@你的服务器IP

输入服务器密码,公钥就会被自动追加到服务器的 ~/.ssh/authorized_keys 文件里。

如果没有 ssh-copy-id(Windows某些终端可能没有),手动操作也很简单。先在本地查看公钥内容:

cat ~/.ssh/id_ed25519.pub

复制输出的那一长串。然后SSH登录到服务器,手动写入:

mkdir -p ~/.ssh
echo "复制的公钥内容到这里" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

权限设置很关键。700表示只有你能读写.ssh目录,600表示只有你能读写authorized_keys。很多SSH报错都是权限问题导致的。

步骤三:测试密钥登录

先别关当前的SSH连接!开一个新的终端窗口测试:

ssh -i ~/.ssh/id_ed25519 user@你的服务器IP

如果配了passphrase,会提示你输入。没配就直接进去了。确认新连接能正常登录后,再关闭旧连接。

步骤四:禁用密码登录

既然密钥登录已经正常工作了,把密码登录关掉,彻底杜绝暴力破解。

编辑服务器上的SSH配置:

sudo nano /etc/ssh/sshd_config

找到或修改以下行:

PasswordAuthentication no
PermitRootLogin prohibit-password

保存后重启SSH服务:

# Ubuntu/Debian
sudo systemctl restart ssh

# CentOS/RHEL
sudo systemctl restart sshd

现在服务器只接受密钥登录。即使有人猜对了你的密码也没用。

步骤五:配置SSH快捷访问(可选)

每次输入长串IP和用户名很麻烦。在你的本地电脑编辑 ~/.ssh/config:

mkdir -p ~/.ssh
nano ~/.ssh/config

加入:

Host vps
    HostName 你的服务器IP
    User root
    Port 22
    IdentityFile ~/.ssh/id_ed25519

之后直接 ssh vps 就能连接。可以添加多个Host块管理多台服务器。

验证

检查服务器是否真的禁用了密码登录:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no user@你的服务器IP

如果配置正确,这条命令会直接拒绝连接,提示 “Permission denied (publickey)"。这说明密码登录已被成功禁用。

常见问题

换了电脑还能登录吗?

不能。私钥是唯一的。把 ~/.ssh/id_ed25519 复制到新电脑,放到同样的路径即可。也可以用 ssh-keygen -t ed25519 -C “…” 在新电脑重新生成。

端口改了22怎么办?

如果SSH端口不是22,用 -p 参数指定:

ssh -i ~/.ssh/id_ed25519 -p 2222 user@IP

密钥文件权限不对,连不上?

服务器上的私钥权限必须是600:

chmod 600 ~/.ssh/id_ed25519

忘记passphrase怎么办?

没救了。passphrase是保护私钥的本地加密,忘了就只能删掉旧密钥重新生成。所以建议用密码管理器记录。

用Windows的PuTTY怎么操作?

PuTTY用的是.ppk格式私钥。用puttygen工具把id_ed25519转换成.ppk,然后在连接设置里指定这个私钥文件。


SSH密钥配置一次受益很久。服务器安全从第一步做起,别等被黑了才后悔。

这篇文章对你有帮助吗?