在日常服务器管理中,频繁输入密码不仅麻烦,还存在被暴力破解的风险。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 密钥免密登录。




评论(0)