概述
每个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密钥配置一次受益很久。服务器安全从第一步做起,别等被黑了才后悔。