在日常服务器管理中,频繁输入密码不仅麻烦,还存在被暴力破解的风险。SSH 密钥登录通过公钥与私钥的加密配对,既提升了安全性,又实现了免密登录。本文将手把手教你完成 Linux 系统下的 SSH 密钥配置。

生成 SSH 密钥对

在本地机器(客户端)打开终端,执行以下命令生成密钥对:

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

若需兼容较旧系统,可使用 RSA:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

参数说明:

– -t ed25519:推荐算法,更安全、密钥更短
– -b 4096:RSA 密钥长度(仅 RSA 时需要)
– -C:注释,通常填写邮箱便于识别

执行后按提示选择保存路径(默认 ~/.ssh/id_ed25519 或 ~/.ssh/id_rsa)和可选的密码短语(passphrase)。

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

– 私钥(如 id_ed25519):必须妥善保管,不可泄露
– 公钥(如 id_ed25519.pub):可安全复制到服务器

将公钥复制到服务器

推荐使用 ssh-copy-id 将公钥部署到远程服务器:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip

将 user 替换为服务器用户名,server_ip 替换为服务器 IP 或域名。执行时输入一次用户密码,工具会自动将公钥写入服务器 ~/.ssh/authorized_keys。

若无 ssh-copy-id,可手动执行:

cat ~/.ssh/id_ed25519.pub | ssh user@server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys"

调整服务器权限

SSH 对密钥文件权限要求严格,登录服务器后执行:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh

– ~/.ssh 目录权限应为 700
– authorized_keys 文件权限应为 600

配置 SSH 服务端

编辑服务器上的 /etc/ssh/sshd_config:

sudo vim /etc/ssh/sshd_config

建议配置项:

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password
AuthorizedKeysFile .ssh/authorized_keys

修改后重启 SSH 服务:

sudo systemctl restart sshd

重要:在将 PasswordAuthentication 设为 no 之前,务必另开终端测试密钥登录是否成功,避免被锁在服务器外。

测试密钥登录

在客户端连接服务器:

ssh user@server_ip

若未设置 passphrase,应直接登录成功;若设置了 passphrase,需输入短语(不是服务器用户密码)。

指定私钥文件时:

ssh -i ~/.ssh/id_ed25519 user@server_ip

常见问题排查

登录失败时可按以下步骤检查:

1. 查看日志:Ubuntu/Debian 执行 sudo tail -f /var/log/auth.log,CentOS 执行 sudo tail -f /var/log/secure
2. 核对公钥:服务器 ~/.ssh/authorized_keys 内容应与本地 .pub 文件一致
3. 检查权限:确认 .ssh 为 700、authorized_keys 为 600
4. 防火墙:确认 SSH 端口(默认 22 或自定义端口)已放行
5. SELinux:若启用,可尝试 restorecon -Rv ~/.ssh/

ssh -v user@server_ip

使用 -v 可查看详细连接日志,便于定位认证失败原因。

安全建议

– 定期更换密钥对,私钥不要上传到网盘或聊天工具
– 可为私钥设置 passphrase,防止本机被盗后密钥被直接使用
– 生产环境建议修改默认 SSH 端口,并结合 fail2ban 等工具防护

完成以上步骤后,即可实现安全、便捷的 SSH 密钥免密登录。

界面预览