我的博客

手把手配置 SSH 密钥登录和安全加固

买了服务器后最担心的问题就是安全。密码登录虽然方便,但暴力破解脚本遍地都是,每天能看到几十次失败的登录尝试。于是 SSH 密钥登录就成了第一件要做的事。

为什么要用密钥

  • 理论上无法被暴力破解(没有密码可以猜)
  • 可以给不同的设备配不同的密钥,丢了可以单独吊销
  • 配合 SSH agent 可以免密登录,方便自动化脚本

生成密钥对

在本地电脑上生成,不是在服务器上:

# 用 ed25519 算法(比 RSA 更安全、更快)
ssh-keygen -t ed25519 -C "my-server-2026"

# 如果想用 RSA(兼容性更好)
ssh-keygen -t rsa -b 4096 -C "my-server-2026"

执行后会问你保存路径和密码短语(passphrase)。密码短语是密钥的二次保护,建议设一个。

上传公钥到服务器

# 方法一:ssh-copy-id(最简单)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器IP

# 方法二:手动复制(如果没装 ssh-copy-id)
cat ~/.ssh/id_ed25519.pub
# 然后登录服务器,粘贴到 ~/.ssh/authorized_keys

禁用密码登录

确认密钥登录成功后,关闭密码登录:

sudo vim /etc/ssh/sshd_config

# 修改以下配置
PasswordAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes

# 重启 SSH 服务
sudo systemctl restart sshd

其他安全加固

# 改 SSH 端口(减少日志噪音)
Port 2222

# 限制登录用户
AllowUsers myname

# 登录失败次数限制
MaxAuthTries 3

# 空闲超时断开
ClientAliveInterval 300
ClientAliveCountMax 0

管理多个密钥

当你有多台服务器时,~/.ssh/config 就很方便了:

Host my-server
    HostName 123.123.123.123
    User myname
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_my_server

Host work-server
    HostName 45.45.45.45
    User admin
    Port 22
    IdentityFile ~/.ssh/id_ed25519_work

配置好后直接 ssh my-server 就能连,不用记 IP 和端口。

密钥丢了怎么办

如果你还有服务器控制台(VNC/IPMI)或者还有其他管理员用户,登录进去删掉旧公钥就行。如果没有,那就只能重装系统了——这也是为什么建议服务器上始终保留一个备用用户。

配置好密钥登录之后,每次 SSH 都安心多了。也算是在服务器安全上迈出了第一步。