Permission Denied (public key)
在用 SSH 连接服务器时, 经常会使用 public key 的方式, 而不是密码的方式登陆, 一个原因是方便, 第二是相对安全, 但使用这种方式进行登陆时经常会遇到 Permission denied. (public key) 的错误, 我遇到的有两种情况
公钥不匹配
解决方案:
在终端首先输入
ssh-keygen
一路回车, 会后会在你的 ~/.ssh/ 目录下生成一对公钥和私钥, 分别是
- 公钥: ~/.ssh/id_rsa.pub
- 私钥: ~/.ssh/id_rsa
你可以通过
cd ~/.ssh
cat ./id_rsa.pub
命令获得公钥, 然后复制粘贴到服务器的相关配置界面, 重启服务器后直接
ssh [email protected]
无需密码即可连接到服务器
用户名不对
这个很坑
我在使用腾讯云的 Ubuntu 服务器时, 用上述方法仍不能解决问题, 最后发现, 登陆 Ubuntu 的用户名应该是 ubuntu 而不是 root, 所以在按照上述方法在服务器配置好公钥后, 应输入
ssh [email protected]
即可连接服务器
finger print mismatch
当你用 ssh 第一次连接一个新的服务器时, 会要求你记录该服务器的 fingerprint, 也就是它的私钥. 具体而言, 在使用 ssh 正式向服务器建立连接之前, 服务器会给你它的公钥并证明它是这个公钥的所有者, 如果你是第一次和该服务器 ( IP地址 )连接, 你会将 { IP: public key (finger print) } 这一键值对存储下来, 在以后的连接时, 你的电脑会验证该服务器发来的公钥是否和你之前存储的相匹配, 如果不匹配会报错, 不匹配的原因主要有两个:
- 服务器重装系统 / 重新部署, 从而生成了新的公钥私钥
- 遭遇中间人攻击
你作为服务器的主人应该知道是否确实重装过系统, 如果原因是前者, 那么你只需要将 ~/.ssh/known_hosts 文件中相应的那一行删去即可.
如果你确定你的服务器确实没有被修改, 那么很有可能是遭到攻击, 就要采取相应措施来规避安全问题了.