不用账号密码登录服务器,最通用的答案是使用SSH密钥对完成免密认证,用私钥代替密码登录,既安全又省事。
很多人在配置服务器时都遇到过一个麻烦事:记住一串又长又复杂的密码,或者每次登录都要输入密码,登录一台Linux服务器完全可以告别账号密码,SSH密钥认证是行业里最常用的做法,本文就把几种免密登录的方式讲明白,同时对比它们各自的适用场景,帮助你选出最适合自己的方案。
SSH密钥登录服务器的完整操作步骤
SSH密钥认证的原理是使用一对密钥公钥放在服务器上,私钥留在本地,登录时,服务器用公钥验证你的私钥,验证通过就直接放行,整个过程不发密码。
第一步:在本地生成密钥对
打开终端,执行以下命令(Windows用户可以用Git Bash或PowerShell):
ssh-keygen -t ed25519 -C "your_email@example.com"
一路按回车,默认保存路径为~/.ssh/id_ed25519,建议设置一个私钥passphrase,但这不是登录服务器要用的密码,而是保护私钥文件的本地口令,可以留空。
生成后,你会得到两个文件:
id_ed25519:私钥,千万不能泄露,相当于你的数字身份证。id_ed25519.pub:公钥,可以放心放在服务器上。
第二步:把公钥复制到服务器
使用ssh-copy-id最简单,它会自动把公钥追加到服务器的~/.ssh/authorized_keys文件中:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
如果服务器没有ssh-copy-id命令,可以手动操作,先在本地查看公钥内容:
cat ~/.ssh/id_ed25519.pub
然后登录服务器,在~/.ssh/目录下创建authorized_keys文件,把公钥粘贴进去,注意权限配置:
mkdir -p ~/.ssh chmod 700 ~/.ssh echo "粘贴你的公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
完成这些步骤后,再次连接服务器,就不会再提示输入密码了。
第三步:验证免密登录是否生效
ssh user@server_ip
若直接进入服务器命令行,说明密钥认证已生效,如果仍有密码提示,检查服务器/etc/ssh/sshd_config文件中的配置项:
PubkeyAuthentication yes
修改后记得重启SSH服务:
sudo systemctl restart sshd
日常使用中如何彻底禁用密码登录
密钥认证生效后,建议修改服务器的SSH配置,彻底关闭密码认证,让服务器只接受密钥登录,这样能防止暴力破解密码,提升安全性。
编辑/etc/ssh/sshd_config,修改以下两个参数:
PasswordAuthentication no
ChallengeResponseAuthentication no
保存后重启SSH服务,此时如果你丢失了私钥,就再也无法登录服务器了,所以务必做好私钥备份。
如果你想直观感受一下免密登录和密码登录的区别,可以对比一下两种方式的时间消耗和使用体验,下表整理了常见的区别点:
| 对比项 | 密码登录 | SSH密钥登录 |
|---|---|---|
| 登录速度 | 每次需要输入密码 | 即时连接 |
| 安全性 | 密码可能被暴力破解或网络嗅探 | 非对称加密,私钥不触网 |
| 操作便捷度 | 命令简单直接 | 需要提前配置密钥 |
| 多服务器管理 | 需要记住多套密码 | 统一使用同一密钥或分角色密钥 |
| 自动化脚本支持 | 需要交互输密码,不适合自动化 | 完全免交互,适合CI/CD |
很多人会问,那是不是用密钥登录就一劳永逸了?日常运维中,确实可以把密钥配合ssh-agent使用,将私钥加入本地代理,避免每次连接都要输入私钥passphrase,对于经常远程维护服务器的技术人员而言,这是比较推荐的免密方案。
云服务器免密登录的常见配置方式
如果你用的是简米云、酷番云、华为云这类云服务器,购买实例时就可以选择密钥对方式,云平台的密钥登录和自建SSH密钥原理一致,主要在配置入口上有所不同。
在云控制台创建密钥对
以简米云为例,在“网络与安全”菜单下找到“密钥对”,点击创建,然后下载私钥文件,创建ECS实例时,选择“密钥对登录”,然后把已有的公钥绑定到实例上,酷番云则在“SSH密钥”页面创建,方式类似。
国内云平台的密钥对通常支持Linux服务器,Windows服务器默认还是使用密码或证书登录,根据自身服务器系统选择相应方案即可。
云服务器只用密码登录靠谱吗
部分临时测试环境图省事,一直沿用密码登录,说实话,这种做法的安全隐患较大,业内专家指出,互联网上的服务器每隔几分钟就会受到自动化工具的扫描和暴力破解尝试,使用强密码能挡一部分力度,但一旦密码被撞库,服务器就暴露在风险中。
凡是面向生产环境的云服务器,建议第一时间换成密钥登录,并关闭密码认证。
不用账号密码登录服务器的其他几种方案
除了SSH密钥,还有两种常见的免密登录方式,分别适用于不同使用场景。
使用跳板机证书登录多台内网服务器
如果你管理的内网服务器数量较多,可以直接在跳板机上配置证书认证,然后通过跳板机转发到目标机器,此时你只需要登录跳板机一次,其他内网主机不用逐个输入密码。
操作方式类似,把公钥分发到每一台内网主机的authorized_keys中,然后在本地SSH配置文件~/.ssh/config中定义跳板参数:
Host internal-server
HostName 192.168.1.10
User root
ProxyJump jump-server
连接时使用ssh internal-server,就能自动经过跳板机直连目标服务器,全程无密码。
使用密码管理器自动填充登录凭据
部分场景下,服务器本身不支持改SSH配置,或者使用云平台网页终端登录,这时可以用密码管理器(比如KeePass、1Password)生成高强度随机密码,并在登录时自动填充,这种方式不依赖密钥认证,但本质还是用密码,只不过实现了解放记忆的效果。
密码管理器更多用于个人电脑解压密码或网站登录,对服务器运维场景来说,密钥认证依然是首选。
服务器免密登录的前期准备与注意事项
不少人在配置密钥登录时踩过坑,往往是因为细节没有处理好,这里整理几个关键点:
- 私钥权限必须严格:本地私钥文件建议设为
600权限,如果权限过大,SSH会拒绝使用。 - 不能有换行:复制公钥时要确保一整行粘贴进去,中间不能有意外断行。
- 服务器的home目录权限不能过于宽松:
~/.ssh目录权限建议为700,authorized_keys为600,否则服务器出于安全考虑会忽略密钥文件。 - 多台服务器的私钥管理:建议不同环境使用不同的密钥对,例如办公电脑、个人电脑、部署服务器分别使用独立密钥,这样即使一把钥匙丢了也不会波及全部服务器。
这些细节虽然不起眼,但直接影响密钥认证是否生效,处理完这些问题后,你会发现免密登录确实让运维体验提升了一大截。
忘记服务器密码时如何免密登录
还有一种特殊情况,就是一开始没有配置密钥,现在服务器密码忘了,怎么办?很多初次管理服务器的人都遇到过这种问题。
如果使用的是云服务器,通常可以在云控制台上重置密码,操作路径为:进入实例列表,选择该实例,点击“更多” → “密码/密钥” → “重置实例密码”,重置后还需要重启实例,再用新密码登录。
如果使用的是自建物理机或虚拟机,可以进入单用户模式或者使用救援模式重置密码,这需要你有物理控制台或带外管理权限,操作方式相对复杂,此处不再展开,因为大部分云用户在前一种情况下就能解决。
所以说,要真正做到不用账号密码登录,提前配置密钥认证才是最佳选择,等到出了状况再想办法,往往绕远路。
关于免密登录服务器的常见问题解答
使用SSH密钥登录服务器和密码登录相比,安全性真的更高吗?
是的,密码是静态字符串,可以在网络传输中被截获或通过撞库尝试获得,SSH密钥则基于非对称加密算法,登录过程中私钥不会传输到服务器,只用于本地签名验证,即使攻击者截获了网络流量,也无法反推出私钥内容,使用密钥配合禁用密码认证后,服务器不会接受密码输入,暴力破解的空间被完全关闭。
Windows电脑可以免密登录Linux服务器吗?
可以,Windows 10以上系统自带OpenSSH客户端,在PowerShell或命令提示符中直接使用ssh命令即可,生成密钥的方式也和Linux相同,执行ssh-keygen后,公钥保存到C:Users你的用户名.sshid_ed25519.pub,复制公钥内容配置到服务器的authorized_keys中,即可正常免密登录。
如果想用同一把密钥登录多台服务器,应该怎么操作?
需要把同一个公钥文件的内容分别写入每台服务器的~/.ssh/authorized_keys,使用ssh-copy-id可以快速完成,例如依次执行ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host1、host2等,如果你想撤销其中一台服务器的权限,只需要删除该服务器上对应的公钥行,日常使用中,建议定期审查服务器上的authorized_keys内容,清除不再使用的公钥,这种管理方式在多台服务器之间切换时,省去了记忆多套密码的麻烦,也是许多团队批量管理服务器的默认做法。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/720993.html





