一、問題描述
在用Linux終端使用ssh root@server_ip來連接到遠程服務器時劳翰,出現(xiàn)Permission denied (publickey).提示
二馒疹、問題原因
2.1 ssh連接
- 本地生成的一對秘鑰,私鑰(
~/.ssh/id_rsa
)和公鑰(~/.ssh/id_rsa.pub
) - 公鑰(
~/.ssh/id_rsa.pub
)應該保存在遠程服務端的已認證的秘鑰文件內(nèi)(~/.ssh/authorized_keys
) - 連接過程:
- 1颖变、本地向遠程服務端發(fā)起連接
- 2、服務端隨機生成一個字符串發(fā)送給發(fā)起登錄的本地端
- 3马胧、本地對該字符串使用私鑰(
~/.ssh/id_rsa
)加密發(fā)送給服務端 - 4衔峰、服務端使用公鑰(
~/.ssh/id_rsa.pub
)對私鑰加密后的字符串進行解密 - 5、服務端對比解密后的字符串和第一次發(fā)送給客戶端未加密的字符串朽色,若一致則判斷為登錄成功
2.2 問題分析
分析登錄過程,Permission denied(publickey)的問題可能如下
1抱冷、遠程服務器沒有添加公鑰(無法認證)
2、遠程服務器公鑰文件夾權(quán)限錯誤(.ssh
和.ssh/authorized_keys
需要保證只有用戶自己有權(quán)限旺遮,否則驗證無效)
三、問題解決
3.1 公鑰沒有添加
如果服務器端根本就沒有添加公鑰是斷然不可能通過認證的
Solution
1耿眉、客戶端已經(jīng)有秘鑰對:通過其它方式登錄到遠程服務器,查看~./ssh/authorized_keys
文件中是否添加了公鑰组底,若沒有可直接將公鑰內(nèi)容拷貝到該文件末尾
2、客戶端沒有秘鑰對:通過ssh-keygen
命令生成秘鑰對债鸡,默認文件夾是~/.ssh
文件夾铛纬,將.ssh
文件夾內(nèi)id_rsa.pub
的內(nèi)容拷貝到服務器上的~./ssh/authorized_keys
文件末尾(若服務器上~./ssh/authorized_keys
不存在則也可以使用ssh-keygen
來生成文件結(jié)構(gòu))
3.2 遠程服務器.ssh權(quán)限問題
遠程服務器~/.ssh
文件夾及其文件權(quán)限不對,包括
1棺弊、~./ssh/authorized_keys
文件權(quán)限
2、~/.ssh
文件夾權(quán)限
3镊屎、~/.ssh
文件夾所有權(quán)
Solution
通過其它方式登錄到遠程服務器茄螃,如果是阿里云則可以在網(wǎng)頁中通過驗證之后打開一個終端,然后進行如下操作
- 更改文件所有權(quán)
$ chown -R your_user:your_group ~/.ssh
//我用root登錄归苍,your_user是root
- 更改
.ssh
文件夾權(quán)限
$ chmod 700 ~/.ssh
- 更改
.ssh/authorized_keys
文件權(quán)限
$ chmod 600 ~/.ssh/authorized_keys
四、備注
感謝評論區(qū)提醒夏伊,上文所有的~符號均為英文符號