Permission denied (publickey)

一、問題描述

在用Linux終端使用ssh root@server_ip來連接到遠程服務器時,出現Permission denied (publickey).提示

二、問題原因

2.1 ssh連接

  1. 本地生成的一對秘鑰,私鑰(~/.ssh/id_rsa)和公鑰(~/.ssh/id_rsa.pub
  2. 公鑰(~/.ssh/id_rsa.pub)應該保存在遠程服務端的已認證的秘鑰文件內(~/.ssh/authorized_keys
  3. 連接過程:
    • 1、本地向遠程服務端發起連接
    • 2、服務端隨機生成一個字符串發送給發起登錄的本地端
    • 3、本地對該字符串使用私鑰(~/.ssh/id_rsa)加密發送給服務端
    • 4、服務端使用公鑰(~/.ssh/id_rsa.pub)對私鑰加密后的字符串進行解密
    • 5、服務端對比解密后的字符串和第一次發送給客戶端未加密的字符串,若一致則判斷為登錄成功

2.2 問題分析

分析登錄過程,Permission denied(publickey)的問題可能如下
1、遠程服務器沒有添加公鑰(無法認證)
2、遠程服務器公鑰文件夾權限錯誤(.ssh.ssh/authorized_keys需要保證只有用戶自己有權限,否則驗證無效)

三、問題解決

3.1 公鑰沒有添加

如果服務器端根本就沒有添加公鑰是斷然不可能通過認證的

Solution

1、客戶端已經有秘鑰對:通過其它方式登錄到遠程服務器,查看~./ssh/authorized_keys文件中是否添加了公鑰,若沒有可直接將公鑰內容拷貝到該文件末尾
2、客戶端沒有秘鑰對:通過ssh-keygen命令生成秘鑰對,默認文件夾是~/.ssh文件夾,將.ssh文件夾內id_rsa.pub的內容拷貝到服務器上的~./ssh/authorized_keys文件末尾(若服務器上~./ssh/authorized_keys不存在則也可以使用ssh-keygen來生成文件結構)

3.2 遠程服務器.ssh權限問題

遠程服務器~/.ssh文件夾及其文件權限不對,包括
1、~./ssh/authorized_keys文件權限
2、~/.ssh文件夾權限
3、~/.ssh文件夾所有權

Solution

通過其它方式登錄到遠程服務器,如果是阿里云則可以在網頁中通過驗證之后打開一個終端,然后進行如下操作

  • 更改文件所有權
$ chown -R your_user:your_group ~/.ssh  
//我用root登錄,your_user是root
  • 更改.ssh文件夾權限
$ chmod 700 ~/.ssh
  • 更改.ssh/authorized_keys文件權限
$ chmod 600 ~/.ssh/authorized_keys

四、備注

感謝評論區提醒,上文所有的~符號均為英文符號

五、參考文獻

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容