出现Permission denied (publickey)的解决方法

ssh [email protected] 报错

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来生成文件结构)
如果是你连接公司的项目服务器失败,大概率是你没有在git中配置你的Keys

解决办法:

        打开终端,执行以下代码块:

ssh-keygen -t rsa -C "[email protected]" -b 4096
pbcopy < ~/.ssh/id_rsa.pub
上述命令会在~/.ssh/目录下生成id_ras.pub公钥,并将其内容复制到剪贴板中,然后浏览器打开你们使用的git地址,选择 Add key,command + v 将你的开发环境的 Public key 添加到信任列表中。

远程服务器公钥文件夹权限错误
通过其它方式登录到远程服务器,然后进行如下操作:

// 更改文件所有权。我用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)对私钥加密后的字符串进行解密
 
服务端对比解密后的字符串和第一次发送给客户端未加密的字符串,若一致则判断为登录成功
 

你可能感兴趣的:(linux,ssh,服务器,git)