Putty环境下SSH公钥配置与无密码登录异常问题求助
Putty环境下SSH公钥配置与无密码登录异常问题求助
看起来你遇到的这几个SSH免密登录的问题确实有点绕,咱们一步步拆解排查:
先理清第一个矛盾:root ssh userTest能免密,但userTest的authorized_keys里没对应公钥?
其实这里你大概率搞混了密钥的验证方向——当你从root账户执行ssh userTest@ip_address时,用的是root账户的私钥去和userTest的SSH服务做验证,所以能免密的原因应该是:/home/userTest/.ssh/authorized_keys里添加了root账户的公钥(或者你本地用来登录root的那个公钥),而不是userTest自己的公钥。你可以登录userTest后执行下面的命令确认:
cat ~/.ssh/authorized_keys
应该能找到你之前配置的那个公钥。
为什么root不能免密登录?
你的root账户~/.ssh/authorized_keys里有公钥但还是需要密码,90%是权限配置不符合SSH的严格要求,你需要确保:
- root的
~/.ssh目录权限为700(只有所有者能读写执行):chmod 700 /root/.ssh authorized_keys文件权限为600(只有所有者能读写):chmod 600 /root/.ssh/authorized_keys- 这两个文件/目录的所有者必须是root:
chown -R root:root /root/.ssh
另外还要检查sshd_config的核心配置:
- 打开配置文件:
vim /etc/ssh/sshd_config - 确认以下选项:
PubkeyAuthentication yes(开启公钥认证)PermitRootLogin yes或者PermitRootLogin prohibit-password(后者仅允许公钥登录root)- 如果你还没完全确认公钥可用,先不要把
PasswordAuthentication设为no
- 修改后重启SSH服务:
systemctl restart sshd # 适用于systemd系统,比如Ubuntu 16.04+/CentOS 7+ # 或者用 service ssh restart (适用于老版本系统)
为什么userTest用Putty连接需要密码?
Putty不直接支持OpenSSH默认的id_rsa/id_dsa格式密钥,需要转换成Putty专用的.ppk格式,步骤如下:
- 打开Puttygen工具(和Putty一起安装的配套工具)
- 点击左上角的「Load」,选择你的OpenSSH私钥文件(注意要在文件类型里选「All Files」才能看到)
- 点击「Save private key」,保存成
.ppk格式的文件(可以设置密码保护,也可以跳过) - 打开Putty,在左侧菜单找到「Connection -> SSH -> Auth」,点击「Browse」选择刚才保存的
.ppk文件 - 再尝试连接userTest账户,应该就能免密登录了
另外也要确认userTest的.ssh目录和authorized_keys权限正确(同样是700和600,所有者为userTest),不然即使有正确的私钥也会被SSH服务拒绝。
最后建议的标准化配置步骤(避免混乱)
- 先搞定root账户的公钥登录:把你本地的公钥添加到
/root/.ssh/authorized_keys,设置好权限,测试用Putty或本地SSH登录root免密成功 - 再配置userTest账户:把你本地的公钥添加到
/home/userTest/.ssh/authorized_keys,设置权限,测试免密登录成功 - 等所有公钥登录都验证正常后,再修改
sshd_config禁用密码登录:PasswordAuthentication no,重启SSH服务
备注:内容来源于stack exchange,提问作者jsnjdhs
相关产品推荐
相关产品推荐

