单个ECS免密登录的答案很简单:在本地生成一对密钥,把公钥放入服务器~/.ssh/authorized_keys,再按需关闭密码登录通道,ssh登录就再也不需要输入密码。无论你走云控制台还是纯命令行,本质上都是完成这两步,下面用最常见的简米云ECS环境走一遍完整流程,其他云平台的操作思路完全一致。
ECS免密登录怎么配置单实例从控制台到命令行的完整流程
配单台ECS免密登录有两条路径:一条适合还没正式跑业务的新实例,走控制台绑定密钥对,省去手动传公钥;另一条适合已经在运行的实例,用命令行原地推送公钥,不重启也能生效,两条路都只需要几分钟。
控制台创建密钥对并绑定到实例
如果你正要新开一台ECS,建议直接在控制台完成密钥对创建和绑定,多数云厂商会把“密钥对”入口放在“网络与安全”分组里,进入后按以下步骤操作:
- 把地域切换到实例所在的区域,比如你在华北2创建的ECS,就在华北2的密钥对列表页创建。
- 点击“创建密钥对”,填写名称,加密方式选RSA即可,ED25519虽然更新但也更挑客户端版本。
- 创建成功后浏览器会自动下载一个
.pem后缀的私钥文件,这个文件只会出现这一次,控制台不保存原始私钥。 - 将
.pem文件移动到本地~/.ssh/目录,并执行chmod 400 ~/.ssh/your_key.pem。 - 进入实例列表,选中目标ECS,选择“更多”里的“密钥对”操作,绑定刚刚创建的密钥对。
- 按平台提示重启实例,云厂商会在初始化阶段自动把公钥写入实例的
authorized_keys,无需手动传公钥。
绑定完成后直接 ssh -i ~/.ssh/your_key.pem root@服务器IP 就能登入,重启这一步按平台提示操作,有些云厂商支持热绑定,但大多数情况下重启一次更省心。
已运行ECS的手工部署路径
已有业务的实例不适合马上重启,那就走命令行路径,全程不影响在线连接。
在本地终端生成一对新密钥:
ssh-keygen -t rsa -b 4096 -C "ecs-key" -f ~/.ssh/ecs_key
连续两次回车即可生成无passphrase的密钥对,如果私钥设置了口令,每次ssh时仍需输入一次口令,那是私钥口令,不是系统登录密码。
把公钥推送到目标服务器:
ssh-copy-id -i ~/.ssh/ecs_key.pub root@服务器IP
这一步会要求输入一次当前服务器的登录密码,输入正确后公钥就自动追加到服务器root用户的
authorized_keys 文件里。
然后验证:
ssh -i ~/.ssh/ecs_key root@服务器IP
终端直接进入系统且没有询问密码,说明钥匙已经生效,此操作不需要重启ECS,因为sshd本身会实时读取authorized_keys文件。
切换到纯密钥认证并关闭密码登录
确认密钥能登录后再碰 sshd_config,顺序千万别反,修改服务器端配置:
sudo vim /etc/ssh/sshd_config
确认以下几行设置正确:
PubkeyAuthentication yes PasswordAuthentication no PermitRootLogin prohibit-password
保存后重启服务:
sudo systemctl restart sshd
这组配置的意思是:允许公钥认证,禁止密码登录,root只允许走密钥登录,业内运维专家普遍指出,不少免密配置成功后反而进不去的案例,都是因为先把PasswordAuthentication改成了no,再用未验证的密钥去连接,结果把自己锁在门外。
免密登录设置失败怎么办先查权限、再查参数,最后看网络层
配好后ssh仍然要密码,或者直接报Permission denied (publickey,gssapi-keyexch,password),按下面三个层次排查,基本都能定位,我自己排查这类问题有个固定顺序:权限优先,配置第二,安全组垫后。
文件权限不对,OpenSSH直接拒绝信任
authorized_keys文件权限太宽会被OpenSSH判定为不安全,进而忽略其中的公钥,这是最常见的失败原因。
~/.ssh目录权限必须是700~/.ssh/authorized_keys文件权限必须是600- 文件属主必须和当前登录用户一致
用root账号检查和修复:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chown -R $(id -un):$(id -gn) ~/.ssh
修复后再测试登录,多数情况下这一步就能解决。
sshd_config里的参数被Match块覆盖
sshd_config支持在文件末尾或Match条件块里二次覆盖参数,有时候主配置里写的是PubkeyAuthentication yes,但某个Match User块里又改成了no,实际生效值就变成了no。
查看sshd真正使用的配置:
sudo sshd -T | grep -i pubkey sudo sshd -T | grep -i permitrootlogin
如果输出结果里pubkeyauthentication是no,说明配置文件里存在覆盖项,找到并纠正它,参数排查这一步需要一点耐心,但值得逐行确认。
安全组、SELinux和客户端工具的隐性干扰
云控制台的安全组规则如果只放行了特定源IP,而你当前出口IP不在范围内,ssh的表现是连接超时而不是明确拒绝,此时检查安全组是否放行了TCP 22端口的入方向,并临时把自己的IP加进白名单测试。
部分CentOS发行版还开着SELinux,执行getenforce查看状态,如果返回Enforcing,可临时用setenforce 0切换为Permissive再测试,如果确认是SELinux拦截,需用semanage fcontext或恢复正确的ssh_home_t上下文来根治,而不是长期关闭SELinux,Windows自带的OpenSSH客户端版本较老时,对ed25519密钥的支持不完整,建议换RSA密钥或升级客户端版本后再排除干扰。
免密登录和密码登录的区别在哪密钥对的可控性高于一切
搞清楚了怎么配,还要理解为什么配,密码和密钥是两种完全不同的认证模型,它们在安全逻辑和运维体验上的差异都很大。
安全模型:密码是“知道什么”,密钥是“拥有什么”
密码登录的本质是共享一个字符串,暴力破解工具可以反复尝试这个字符串,而密钥认证基于非对称加密:私钥不出本地,服务器上只存公钥,即使服务器被攻破,攻击者拿到的公钥也无法反向推导出私钥,行业共识认为,密钥认证在防暴力破解和防中间人截获两个维度上都比密码登录更可靠。
免密登录不是没有认证,而是把认证凭证从“由人记忆的密码”换成了“由文件保存的私钥”,所以你不需要再为密码复杂度、定期更换这些事消耗精力,真正要上心的是私钥的保管方式,把私钥文件权限设为400或600,不要提交到代码仓库,不要通过聊天工具明文发送。
运维效率提升:当免密让scp和rsync跑起来
单台ECS配好免密后,最大的变化不在交互式登录,而在于无人值守场景。
scp传文件不再卡在密码输入。rsync定时同步可以放进cron作业。ansible、jenkins等工具可以直接通过ssh批量执行命令。- 本地的
~/.ssh/config里还能给这台ECS设置别名,以后直接ssh web-server即可登录。
就算现在只有一台机器,这套配置也为后续加机器铺好了路,一个密钥对可以关联多台实例,新ECS绑定密钥对时复用同一把公钥即可,控制台操作本质上就是把同一份公钥复制到不同机器的
authorized_keys里,管理华东、华北多个地域的实例也是同一套动作,不存在额外费用,密钥对资源本身的创建和绑定不产生计费项。
私钥保管决定了这套配置是安全还是灾难
密钥登录的安全性高度依赖私钥的保密性,建议私钥设置passphrase,哪怕用简单的短语,也能在私钥文件泄露时多一层防护,实际工作中,把私钥存入密码管理器或专门的密钥托管工具是常见做法,上传到公司统一跳板机也可以,但一定要确保这些存储位置本身有访问控制。
如果私钥彻底丢失,云平台无法帮你找回来,只能重新创建密钥对再绑定,所以私钥的备份策略要和服务器密码同样重视。
服务器免密登录配置高频疑问解答
免密登录配置好之后,密码登录还能用吗?
取决于PasswordAuthentication这个参数的值,保持默认yes时,两种认证方式并存,免密只是额外开了一条通道;改成no并重启sshd后,密码通道直接关闭,只有持有对应私钥的客户端能进入,云控制台重置实例密码操作的是系统层面的登录密码,它不会自动改回sshd的认证方式,想恢复密码登录需要先打开PasswordAuthentication参数并重启服务。
私钥文件丢了,还有没有救?
私钥丢失无法找回,但服务器仍然是可控的,两条恢复路径:第一条,在云控制台重新创建密钥对并绑定到目标实例,绑定后新公钥会进入服务器的authorized_keys文件;第二条,用控制台的“重置实例密码”功能重设系统密码,通过密码登录服务器后,手动把新公钥追加到authorized_keys并清掉旧公钥,建议恢复后把私钥至少存放在两处安全位置,比如本机加密码管理器,避免再次陷入同样处境。
多人都要免密登录同一台ECS,怎么处理?
不需要为每个人单独创建服务器用户,最简单的方式是收集每个人的公钥,逐个追加到同一个authorized_keys文件里,这样每行记录对应一个人,后续某人离职时编辑文件删除对应行即可,无需重启服务,配合sshd日志,还能根据公钥指纹定位具体是哪台客户端建立的连接,权限回收比共享密码更精准。
单个ECS的免密配置其实就这些内容:控制台绑定或命令行推送公钥、确认参数、按权限和配置排查异常,配好之后,这台机器的登录体验和安全基线都会明显上一个档次,后续扩展更多服务器时,也只是把同一套钥匙复制过去而已。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/587125.html

![[5分钟学linux] 4-使用xshell7通过密钥对的方式远程连接阿里云ecs云服务器](https://i1.hdslb.com/bfs/archive/f4a0c16d8b4927c03c4830bb59f24bd4d8fccbfb.jpg)


