SSH远程连接时报错提示Permission denied (publickey).的解决方法
1. 发现问题
在Linux终端使用ssh root@server_ip
来连接到远程服务器时,出现Permission denied (publickey).
提示
2. 分析问题
- 远程主机禁用了ssh密码登录权限
- 本地访问远程主机的公钥没有添加或者被取消(无法认证)
本地生成的一对秘钥,私钥~/.ssh/id_rsa
和公钥~/.ssh/id_rsa.pub
。公钥~/.ssh/id_rsa.pub
应该保存在远程服务器端已认证的秘钥文件内~/.ssh/authorized_keys
- 远程服务器公钥文件夹权限错误(.ssh和.ssh/authorized_keys需要保证只有用户自己有权限,否则验证无效)
远程服务器~/.ssh文件夹及其文件权限不对,包括
~./ssh/authorized_keys文件权限
~/.ssh文件夹权限
~/.ssh文件夹所有权
3. 解决问题
- 允许ssh密码登录权限
登录目标机器,打开/etc/ssh/sshd_config
,修改PasswordAuthentication no
为:PasswordAuthentication yes
。
# vim /etc/ssh/sshd_config
PasswordAuthentication yes
然后重启服务。
# service sshd restart
- 公钥没有添加或被取消
如果服务器端根本就没有添加公钥是断然不可能通过认证的。解决:
客户端已经有秘钥对:通过其它方式登录到远程服务器,查看~./ssh/authorized_keys文件中是否添加了公钥,若没有可直接将公钥内容拷贝到该文件末尾。
客户端没有秘钥对:通过ssh-keygen命令生成秘钥对,默认文件夹是~/.ssh文件夹,将.ssh文件夹内id_rsa.pub的内容拷贝到服务器上的~./ssh/authorized_keys文件末尾(若服务器上~./ssh/authorized_keys不存在,则也可以使用ssh-keygen来生成文件结构)
- 远程服务器公钥文件夹权限错误
通过其它方式登录到远程服务器,然后进行如下操作:
// 更改文件所有权。我用root登录,your_user是root
# chown -R your_user:your_group ~/.ssh
// 更改.ssh文件夹权限
# chmod 700 ~/.ssh
// 更改.ssh/authorized_keys文件权限
# chmod 600 ~/.ssh/authorized_keys
补充知识:ssh会话连接过程
本地向远程服务端发起连接
服务端随机生成一个字符串发送给发起登录的本地端
本地对该字符串使用私钥(~/.ssh/id_rsa)加密发送给服务端
服务端使用公钥(~/.ssh/id_rsa.pub)对私钥加密后的字符串进行解密
服务端对比解密后的字符串和第一次发送给客户端未加密的字符串,若一致则判断为登录成功
我曾七次鄙视自己的灵魂:
第一次,当它本可进取时,却故作谦卑;
第二次,当它在空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。
时间仓促,如有错误欢迎指出,欢迎在评论区讨论,如对您有帮助还请点个推荐、关注支持一下
作者:博客园 - 角刀牛
出处:https://www.cnblogs.com/jiaodaoniujava/
该文章来源互联网,本博仅以学习为目的,版权归原作者所有。
若内容有侵犯您权益的地方,请公告栏处联系本人,本人定积极配合处理解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)