~/.ssh/authorized_keys
文件,之后登录无需输入密码。免密登录原理
通过非对称加密实现:
- 私钥(Private Key)存储在客户端(本地电脑),需严格保密。
- 公钥(Public Key)存储在服务器(远程主机),用于验证私钥。
当客户端连接服务器时,服务器用公钥验证私钥的签名,无需密码。
详细操作步骤
生成密钥对(本地操作)
ssh-keygen -t ed25519 -C "your_email@example.com"
-t ed25519
:推荐使用更安全的Ed25519算法(兼容性要求可选rsa
)。- 提示保存路径:默认按回车(
~/.ssh/id_ed25519
)。 - 设置密钥密码(Passphrase):建议设置(为空则完全免密,但安全性降低)。
上传公钥到服务器
使用ssh-copy-id
(推荐)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
- 输入一次服务器密码后,公钥会自动复制到
~/.ssh/authorized_keys
。
手动复制
# 本地查看公钥内容 cat ~/.ssh/id_ed25519.pub # 登录服务器,将公钥添加到授权文件 mkdir -p ~/.ssh echo "粘贴公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys # 关键权限设置!
测试免密登录
ssh user@server_ip
- 若设置过Passphrase,首次连接需输入一次(后续可交由SSH代理管理)。
- 成功登录即表示配置完成。
安全加固措施
-
禁用密码登录(服务器端)
编辑/etc/ssh/sshd_config
:PasswordAuthentication no ChallengeResponseAuthentication no
重启服务:
sudo systemctl restart sshd
。 -
使用Passphrase保护私钥
即使私钥泄露,攻击者仍需破解Passphrase,可通过ssh-agent
管理:eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 # 添加私钥到代理(输入一次Passphrase)
-
限制公钥使用范围
在authorized_keys
中追加限制(例如仅允许特定IP):from="192.168.1.100" ssh-ed25519 AAAAC3Nz... user@example.com
常见问题排查
问题现象 | 解决方案 |
---|---|
仍提示输入密码 | 检查服务器~/.ssh/authorized_keys 权限(必须为600 )。 |
Permission denied (publickey) | 服务端sshd_config 中确保PubkeyAuthentication yes 。 |
私钥权限过宽 | 本地执行chmod 600 ~/.ssh/id_ed25519 。 |
防火墙/网络问题 | 确认服务器SSH端口(默认22)开放:sudo ufw allow 22 。 |
为什么推荐免密登录?
- 安全性:抵御暴力破解密码攻击。
- 便捷性:适合自动化任务(如脚本、CI/CD)。
- 合规性:符合审计要求(密钥可追溯责任人)。
重要提醒
- 私钥等同于密码!切勿共享或存储在不安全环境。
- 服务器禁用密码登录后,确保至少一个公钥已生效,否则可能永久失去访问权限。
- 定期轮换密钥(每年一次)。
引用说明
本文参考:
- OpenSSH官方文档 (man.openbsd.org)
- Linux Foundation安全指南 (linuxfoundation.org)
- NIST密码标准 (nvlpubs.nist.gov)
遵循E-A-T原则,确保内容专业、可靠,实际操作前建议备份关键数据。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/41474.html