服务器免密登录通过SSH密钥对实现,配置后无需手动输入密码,既提升运维效率又显著增强账户安全性。
什么是服务器免密登录
服务器免密登录的本质是SSH密钥认证,它使用非对称加密算法,生成一对密钥:公钥和私钥,公钥存储在远程服务器上,私钥保留在本地运维终端,连接时,服务器通过公钥验证本地私钥的签名,匹配则直接放行,整个过程不涉及密码传输,也无需人工输入。
密钥认证原理
- 客户端发起SSH连接请求
- 服务器从预设的authorized_keys文件中读取公钥,生成随机挑战
- 客户端用私钥对挑战签名,返回服务器
- 服务器用公钥验证签名,通过即建立会话
与密码登录的对比
| 对比项 | 免密登录(密钥对) | 传统密码登录 |
|---|---|---|
| 安全性 | 私钥2048位起步,几乎无法暴力破解 | 密码易被撞库或弱口令爆破 |
| 便捷性 | 单次配置后无感连接 | 每次输入密码,不适合自动化 |
| 审计性 | 可通过私钥追踪来源 | 密码共享后难以追溯 |
| 运维成本 | 初始配置稍复杂,长期省力 | 适合临时少量访问 |
行业共识认为,大规模服务器管理中免密登录已成为标配,尤其在云原生和自动化运维场景下,密钥认证是基础设施的一部分。
服务器免密登录配置步骤
配置过程分为生成密钥对和部署公钥两步,无论使用哪种Linux发行版,命令基本一致。
准备条件
- 本地机安装OpenSSH客户端(macOS/Linux自带,Windows可选安装)
- 远程服务器开启SSH服务(默认端口22)
- 拥有服务器账户的sudo权限或至少能写入用户目录
生成密钥对
在本地终端执行:
ssh-keygen -t rsa -b 4096 -C "你的邮箱或备注"
-t rsa指定算法,也可用ed25519(更高效)-b 4096指定位数,默认2048已安全,4096更稳妥-C添加注释,便于识别
按提示设置保存路径(默认~/.ssh/id_rsa)和私钥密码(passphrase),私钥密码是额外保护,即使私钥泄露也无法直接使用,日常使用可留空,但建议设置。
将公钥复制到服务器
ssh-copy-id(推荐)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
输入当前服务器密码后,公钥自动追加到~/.ssh/authorized_keys。
手动追加
cat ~/.ssh/id_rsa.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
然后手动设置权限:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
测试免密登录
ssh user@server_ip
若首次连接成功且不再提示输入密码,则配置生效,若之前设置过私钥密码,需输入一次passphrase,可借助ssh-agent缓存。
配置多台服务器免密登录
将同一公钥复制到多台机器即可,也可为不同服务器生成不同密钥对,通过~/.ssh/config文件管理:
Host server1 HostName ip1 User user1 IdentityFile ~/.ssh/id_rsa_server1 Host server2 HostName ip2 User user2 IdentityFile ~/.ssh/id_rsa_server2
这样ssh server1和ssh server2自动使用对应私钥,连接更高效。
Windows环境配置
Windows 10/11自带OpenSSH客户端,操作类似,在PowerShell中执行:
ssh-keygen -t ed25519
公钥文件位于C:Users用户名.sshid_ed25519.pub,复制到服务器时若没有ssh-copy-id,可手动粘贴内容到远程authorized_keys。
免密登录失败常见原因
即使按步骤操作,偶尔也会遇到免密登录失败的情况,多数问题出在权限或路径上。
权限不正确
服务器端~/.ssh目录权限应为700,authorized_keys文件权限为600,太多用户对该目录有写权限时,SSH安全策略会拒绝使用密钥认证。
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
本地私钥文件权限应为600,否则SSH会提示“bad permissions”并忽略。
公钥未正确追加
检查authorized_keys文件末尾是否有完整的公钥字符串,若手动复制,注意不要有空行或换行错误,使用cat查看,确保每行一个公钥。
SELinux或防火墙限制
部分Linux发行版默认启用SELinux,可能阻止SSH读取authorized_keys,临时排查可执行setenforce 0,若问题解决,需调整策略,防火墙应确保端口22开放。
服务端其他配置
/etc/ssh/sshd_config中PubkeyAuthentication必须为yes(默认是)AuthorizedKeysFile指向(默认路径).ssh/authorized_keys
- 若修改过端口,连接时需指定
-p 端口号
修改sshd配置后执行systemctl restart sshd生效。
服务器免密登录配置常见问题
Q1:免密登录真的安全吗?比密码好吗?
A: 免密登录本身比密码登录更安全,因为私钥长度远超密码,且无法被远程暴力破解,但安全取决于私钥保管:私钥需加密存储(设置passphrase),不要复制到公共环境,若私钥泄露,对方可凭其登录所有部署对应公钥的服务器,因此私钥是最高凭证,建议使用硬件密钥或SSH代理管理。
Q2:为什么免密登录配置后,有时还是提示输入密码?
A: 常见原因有两种:一是服务器上authorized_keys文件权限不正确,导致SSH服务拒绝读取;二是私钥未在本地~/.ssh/目录下,或未通过-i参数指定正确路径,使用ssh -v user@host输出详细日志,定位是否被回退到密码认证,然后针对性修复权限或路径。
Q3:如何撤销某台服务器的免密登录?
A: 登录目标服务器,编辑~/.ssh/authorized_keys文件,删除对应公钥整行,若想彻底禁用所有密钥认证,可删除该文件或将其改名,注意,操作后该服务器将无法再通过密钥登录,需确保有其他登录方式(如密码或VNC)以防被锁。
服务器免密登录配置是运维人员的基础技能,一次投入换来日常操作的效率提升和安全加固,无论你是管理几台服务器还是上百台集群,掌握密钥认证都将显著降低密码泄露风险,并让自动化脚本更流畅。私钥即钥匙,保管好它,你的服务器才真正安全。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/543774.html



