PuTTY登录服务器还要输密码,多数情况下不是PuTTY本身故障,而是SSH密钥没有真正生效、私钥格式不对、服务端权限配置过宽,或者登录时根本没有加载私钥。
putty密钥登录失败?为什么配了密钥还会弹密码框
很多人在Linux服务器上配好了公钥,回到Windows上用PuTTY连接,结果还是弹出密码输入框,这种感觉就像你明明配了家门钥匙,走到门口却被保安要求报身份证号一样,行业内普遍认为,SSH密钥登录失败的大部分原因集中在权限和格式两个环节,而不是网络或PuTTY软件本身。
PuTTY和Linux自带OpenSSH客户端的密钥体系并不完全通用,Linux上生成的id_rsa直接放进PuTTY,往往不会生效,因为PuTTY需要自己的.ppk格式私钥,即使格式对了,服务端如果没有开启公钥认证,或者authorized_keys文件权限太宽松,SSH服务也会直接跳过密钥验证,回退到密码登录。
putty ssh免密登录设置后仍提示密码的常见原因
- 服务端
sshd_config里PubkeyAuthentication被设置成no,或者该行被注释后默认策略未生效。 - 公钥没有正确追加到目标用户主目录下的
~/.ssh/authorized_keys,多一个空格、换行、或者整段贴错都会失效。 ~/.ssh目录权限不是700,authorized_keys文件权限不是600,Linux对这两个权限非常敏感,权限太宽会直接拒绝公钥。- 私钥格式不匹配,直接把OpenSSH的
id_rsa当成PuTTY私钥使用,没有用PuTTYgen转换成.ppk。 - 登录时没有在PuTTY的
Connection > SSH > Auth > Credentials里加载私钥文件。 - 用户名写错导致公钥查找路径错误,比如公钥放在
/home/ubuntu/.ssh/authorized_keys,但你用root登录,服务器当然找不到。 - 服务端开启了SELinux,用户主目录下的
.ssh目录安全上下文不正确,导致SSH服务读取不了公钥。 - 某些云服务器镜像默认只允许密码登录,重装或初始化时没有导入密钥。
putty连接linux服务器需要密码?先检查这两个文件
如果你已经照着教程改过PuTTY设置,登录时还是弹密码,先别急着重装软件,问题大概率出在服务端的两个文件上:sshd_config和authorized_keys,这两个文件就像门禁系统的规则表和住户登记表,规则没开或者登记表没写对,钥匙再新也没用。
服务端sshd_config的四个关键项

用管理员权限编辑/etc/ssh/sshd_config,重点确认下面几项。
PubkeyAuthentication yes:必须为yes,如果前面有要去掉。AuthorizedKeysFile .ssh/authorized_keys:确认路径和实际存放位置一致。PasswordAuthentication:如果只想用密钥登录,可以改成no;如果暂时保留密码登录,可以维持yes,但不影响密钥验证。PermitRootLogin:如果以root登录,需要确认该项不是no或prohibit-password。
改完文件后,重启SSH服务让配置生效,不同发行版命令略有差异。
- Debian/Ubuntu:
sudo systemctl restart ssh - CentOS/RHEL:
sudo systemctl restart sshd
重启后不要关闭当前会话,另开一个PuTTY窗口测试登录,如果配置错误导致服务起不来,还能用当前会话回滚。
公钥没放对或权限太宽松
公钥文件是整台服务器最容易出错的地方,正确流程是在目标用户主目录下操作,而不是随意往某个目录一丢。
登录目标用户后,执行以下命令确认权限。
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
单行完整追加到authorized_keys,常见公钥格式为ssh-rsa AAAA... user@host,可以使用命令追加,比手动复制更可靠。
cat id_rsa.pub >> ~/.ssh/authorized_keys
如果权限不对,SSH日志通常会留下明确记录,可以实时查看日志定位。
- Ubuntu/Debian:
sudo tail -f /var/log/auth.log - CentOS/RHEL:
sudo tail -f /var/log/secure
看到Authentication refused: bad ownership or modes for directory或类似提示,基本就是权限问题。
putty保存密码自动登录可行吗?对比密钥登录和密码登录
很多Windows用户会问:既然密钥这么麻烦,PuTTY能不能像某些FTP工具一样把密码存起来自动登录?答案是:PuTTY官方版本不支持保存密码自动登录,它只能保存会话参数,密码框每次都必须手动输入,或者用密钥方式跳过密码。
密码登录、密钥登录、Pageant缓存对比
| 登录方式 | 是否需要每次输密码 | 安全性 | 配置难度 | 适用场景 |
|---|---|---|---|---|
| 密码登录 | 是 |
一般,易被暴力破解 | 低 | 临时连接、测试环境 |
| 密钥登录 | 否 | 高,私钥不在网络传输 | 中 | 生产环境、日常运维 |
| Pageant缓存密钥 | 否 | 高,私钥只在内存中 | 中高 | Windows下多会话免密 |
PuTTY虽然没有内置密码保存功能,但支持配合Pageant(PuTTY自带的SSH认证代理)实现免密登录,把.ppk私钥加载到Pageant后,所有PuTTY会话都会自动使用该私钥,不需要每个会话单独配置,也不用反复输密码,这比在命令行里写-pw 明文密码安全得多,因为私钥不需要落盘到会话配置文件中。
上海地区用户配置putty免密登录的典型场景
上海地区的云服务器用户,尤其是使用简米云、酷番云、华为云ECS的开发团队,出现PuTTY密钥登录失败的频率并不低,一个典型场景是:运维在云控制台创建实例时生成了密钥对,下载了.pem文件,然后直接把.pem导入PuTTY,结果连接时还是要求输密码,甚至提示“No supported authentication methods available”。
这里的核心问题是.pem文件同样是OpenSSH格式,PuTTY无法直接使用,必须先用PuTTYgen打开.pem文件,然后点击Save private key转换成.ppk,部分云平台还要求在控制台绑定密钥对,否则服务端authorized_keys里根本没有公钥,自然只能密码登录。
实操:用PuTTYgen转换密钥并加载到会话
下面把转换、加载、验证的完整步骤拆开,每一步都是可以直接照着做的操作。
转换私钥格式
- 打开PuTTYgen(随PuTTY一起安装,开始菜单里搜索即可)。
- 点击
Load,把文件类型改成All Files,选择你的id_rsa、id_dsa或云平台下载的.pem文件。 - 如果私钥有密码,会提示输入私钥密码。
- 加载成功后,点击
Save private key,保存为.ppk文件。 - 保存时可以设置私钥保护密码,也可以留空,生产环境建议设置密码,与Pageant配合使用。
在PuTTY会话里加载私钥
- 打开PuTTY主界面,在
Host Name填入服务器IP或域名。 - 左侧导航进入
Connection > SSH > Auth > Credentials。 - 点击
Browse,选择刚刚生成的.ppk文件。 - 回到
Session页面,给会话起个名字,点击保存。
Save
- 之后双击这个会话名称,就会自动加载私钥并尝试密钥登录。
连接验证
第一次用密钥登录时,PuTTY会弹出主机密钥确认框,选择Accept即可,如果之前已经保存过主机指纹,这一步不会出现。
登录成功后,可以执行ssh-add -l查看当前会话加载的密钥信息,不过PuTTY的认证代理和Linux环境有差异,在远程服务器上更适合执行grep 'sshd' /var/log/auth.log | tail -20查看认证记录,确认登录方式是publickey而不是password。
Q&A
putty登录服务器还输密码,和服务端sshd权限有关吗?
有关。sshd_config里PubkeyAuthentication如果为no,或者~/.ssh和authorized_keys权限不正确,服务端会直接跳过密钥验证,客户端不会收到任何明确提示,表现就是仍然弹出密码框,检查权限时,~/.ssh应为700,authorized_keys应为600,同时确认文件属主是目标用户本人。
putty密钥登录一直提示密码,怎么用日志快速定位?
登录到服务器后,保持一个SSH会话打开,执行sudo tail -f /var/log/auth.log或sudo tail -f /var/log/secure,然后在PuTTY里重新发起连接,日志中如果出现Authentication refused、bad ownership、Could not open authorized keys、Connection closed by authenticating user等记录,基本可以指向权限、路径或公钥格式问题,没有出现这些记录,则要检查PuTTY是否真正加载了私钥。
putty连接服务器总让输密码,Pageant能避免重复输入吗?
能,Pageant是PuTTY套件中的认证代理工具,启动后把.ppk私钥添加到其中,所有PuTTY会话会自动使用该私钥,不需要每个会话单独设置,也不会在多个标签页之间反复要求输入密码,Pageant只把私钥保存在内存中,比直接把无密码私钥文件暴露在磁盘上更安全,如果服务器端公钥认证配置正确,添加到Pageant后登录时就不会再弹密码框,这也是Windows环境下多服务器运维常用的免密方案。
把authorized_keys权限改成600,确认sshd_config里PubkeyAuthentication yes已经打开,私钥用PuTTYgen转成.ppk,再在会话的Auth选项里加载,多数情况下那个烦人的密码框就会消失,如果仍然出现,去看服务端认证日志,比反复重试更有用。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/821538.html


评论列表(1条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是文件部分,给了我很多新的思路。感谢分享这么好的内容!