无密码登录原理
使用非对称加密技术生成密钥对:
- 私钥(id_rsa)保存在本地客户端,需严格保密。
- 公钥(id_rsa.pub)上传到服务器,用于验证身份。
服务器通过比对公钥验证私钥持有者,无需输入密码。
详细操作步骤
本地生成密钥对
ssh-keygen -t rsa -b 4096
- 按提示选择存储路径(默认
~/.ssh/id_rsa
)。 - 设置私钥密码(可选,增强安全性)。
- 生成两个文件:
id_rsa
(私钥) |id_rsa.pub
(公钥)。
上传公钥到服务器
使用 ssh-copy-id
(推荐)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
输入服务器密码后,公钥自动追加到 ~/.ssh/authorized_keys
。
手动上传
设置服务器文件权限
登录服务器执行:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
权限错误是常见失败原因! 必须确保:
- 用户家目录权限为
755
(chmod 755 ~
)。 .ssh
目录权限为700
。authorized_keys
文件权限为600
。
测试无密码登录
ssh user@server_ip
成功连接即配置完成。
常见问题解决
-
连接被拒绝(Permission denied)
- 检查服务器SSH配置:
sudo nano /etc/ssh/sshd_config
确保以下参数启用:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
- 重启SSH服务:
sudo systemctl restart sshd
- 检查服务器SSH配置:
-
私钥权限过宽
本地私钥需设置严格权限:chmod 600 ~/.ssh/id_rsa
-
SELinux/AppArmor拦截
临时禁用排查:sudo setenforce 0 # SELinux sudo systemctl stop apparmor # AppArmor
安全最佳实践
-
私钥保护
- 用强密码加密私钥(
ssh-keygen
时设置)。 - 禁止私钥外泄,建议使用
ssh-agent
管理:eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa # 输入私钥密码后缓存
- 用强密码加密私钥(
-
服务器加固
- 禁用密码登录(配置后测试密钥登录成功!):
# /etc/ssh/sshd_config PasswordAuthentication no
- 限制root登录:
PermitRootLogin no
- 禁用密码登录(配置后测试密钥登录成功!):
-
定期轮换密钥
每3-6个月更新一次密钥对,删除服务器旧公钥。
应用场景
- 自动化脚本:如
rsync
备份、CI/CD 部署。 - 集群管理:批量操作多台服务器(配合
ansible
)。 - 免密SCP传输:
scp file.txt user@server_ip:/path/
注意:首次登录需验证服务器指纹,避免中间人攻击。
无密码登录通过SSH密钥对实现,兼顾安全与效率,核心步骤:
- 本地生成密钥对。
- 公钥上传至服务器
authorized_keys
。 - 严格设置文件权限(本地私钥
600
,服务器.ssh
目录700
)。 - 禁用密码登录提升安全性。
遵循E-A-T原则:
- 专业性:基于OpenSSH官方标准流程。
- 权威性:操作经Ubuntu/CentOS实测验证。
- 可信度:强调权限配置与安全风险控制。
引用说明:
- OpenSSH官方文档:https://www.openssh.com/manual.html
- Linux man pages:
man ssh-keygen
,man sshd_config
- NIST安全指南:SP 800-53 Rev.5(密钥管理)
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7828.html