如何使用证书登录linux的ssh
如何使用证书登录linux的ssh详细介绍
以下是使用证书(公钥)登录 Linux SSH 的详细步骤和最佳实践,结合安全配置与故障排除方法:
一、生成密钥对(客户端)
- 创建密钥对
在客户端(本地计算机)执行以下命令生成 RSA 或 ED25519 密钥对:
bashssh-keygen ed25519
ssh-keygen rsa
按提示选择保存路径(默认
~/.ssh/id_rsa),并设置密码短语(推荐设置以增强安全性)。 - 查看密钥文件
生成的文件包括:- 私钥:
~/.ssh/id_rsa(或id_ed25519) - 公钥:
~/.ssh/id_rsa.pub(或id_ed25519.pub)
- 私钥:
二、上传公钥到服务器
- 传输公钥
使用ssh-copy-id命令自动将公钥添加到服务器(需密码认证一次):
bashssh-copy-id user@server_ip若无法使用
ssh-copy-id,可手动操作:
bash~/.ssh/id_rsa.pub user@server_ip
- 验证权限
确保服务器端公钥文件权限正确:
bashuser@server_ip
三、配置服务器(SSH 服务端)
- 启用公钥认证
编辑服务器的/etc/ssh/sshd_config:
bash/etc/ssh/sshd_config确保以下配置项存在并设置为
yes:
confPubkeyAuthentication yesRSAAuthentication yes # 若使用RSA
# 其他推荐配置(可选)
PasswordAuthentication no # 禁用密码登录
PermitRootLogin no # 禁止root直接登录
- 重启 SSH 服务
bashsystemctl restart sshd
四、配置客户端(SSH 客户端)
- 添加私钥到代理
启动ssh-agent并添加私钥:
bashssh-agent "ssh-add ~/.ssh/id_rsa
后续登录无需重复输入密码。
- 优化配置文件
编辑客户端的~/.ssh/config(若不存在则创建):
confHost server_ipHostName server_ip
User your_username
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes # 启用代理转发(可选)
之后可直接使用
ssh server_ip登录。
五、测试与验证
- 无密码登录
bashuser@server_ip若成功登录且无需密码,则配置生效。
- 检查日志
服务器端日志路径:
bash/var/log/secure/var/log/auth.log
查看是否有认证失败或权限问题。
六、安全增强
- 禁用密码登录
在服务器的sshd_config中设置:
confPasswordAuthentication no增强安全性,防止暴力破解。
- 限制 root 登录
confPermitRootLogin no改用普通用户登录后通过
sudo提权。 - 防火墙设置
确保 SSH 端口(默认 22)开放:
bashufw allowfirewall-cmd --add-servicessh
七、故障排除
- 权限问题
- 服务器端
.ssh目录权限应为700,authorized_keys为600。 - 客户端私钥权限应为
600:bash~/.ssh/id_rsa
- 服务器端
- 密钥不匹配
- 检查公钥是否正确添加到服务器的
authorized_keys文件。 - 尝试手动复制公钥内容到
authorized_keys,确保无格式错误。
- 检查公钥是否正确添加到服务器的
- SELinux 或 AppArmor
- 临时关闭 SELinux:bash
setenforce - 若需永久关闭,编辑
/etc/selinux/config。
- 临时关闭 SELinux:bash
- 防火墙拦截
- 检查防火墙规则,确保允许 SSH 端口。
八、常见问题
- “权限被拒绝(publickey)”:
检查密钥权限、服务器配置及日志。 - “无法连接到服务器”:
确认服务器 IP、端口、网络连通性及防火墙设置。 - “需要密码”:
确保sshd_config中PasswordAuthentication已禁用,且authorized_keys正确配置。
通过以上步骤,您可以安全、高效地使用证书登录 Linux SSH,避免密码泄露风险。若遇到问题,可参考日志和权限设置逐步排查。