SSH 免密登陸

理想案例

假設一切都很順利的話,最簡單的方式以下:服務器

  1. 使用 ssh-keygen 命令在本地生成一對密鑰(Public/Private Key)ssh

  2. 使用 ssh-copy-id username@your-server-ip 命令將本地的公鑰上傳到遠程服務器code

  3. 如今使用 ssh username@your-server-ip 命令便可免密登陸了cdn

若是以前已經在本地生成過密鑰了,那第一步均可以省了。怎麼看有沒有生成過:使用 ls -a ~/.ssh 命令看下是否已經存在 id_rsa 和 id_rsa.pub 文件,有即生成過。server

現實狀況

但每每看別人玩的很嗨,到本身實操了就會出現各類問題。仍是那句話:該踩的坑一個都不會少! 若是遇到問題了能夠看看下面列舉出來的常見的 TROUBLESHOOTINGblog

  1. 若是你在執行 ssh-copy-id 命令時指定了某個公鑰,好比 ssh-copy-id -i ~/.ssh/id_rsa_another.pub username@your-server-ip,此時注意在使用 ssh 命令遠程鏈接的時候也須要指定這個公鑰,不然默認是會拿 ~/.ssh/id_rsa.pub 去匹配的,因此你的鏈接命令應該是相似這樣:ssh -i ~/.ssh/id_rsa_another.pub username@your-server-ipip

  2. SSH 服務端可能配置了不容許公鑰受權登陸。查看服務器上的 /etc/ssh/sshd_config 文件裏是否配置正確:PubkeyAuthentication yesget

  3. SSH 服務端可能配置了不容許 root 用戶登陸。查看服務器上的 /etc/ssh/sshd_config 文件,其中若是包含 PermitRootLogin no 則將其改成 yesit

基本原理

一張時序圖最能說明問題了 :P io

參考資料

相關文章
相關標籤/搜索