SSH 免密登入
理想案例
假設一切都很順利的話,最簡單的方式如下:
ssh-keygen ssh-copy-id username@your-server-ip ssh username@your-server-ip
如果之前已經在本地生成過金鑰了,那第一步都可以省了。怎麼看有沒有生成過:使用 ls -a ~/.ssh
命令看下是否已經存在 id_rsa 和 id_rsa.pub 檔案,有即生成過。
現實情況
但往往看別人玩的很嗨,到自己實操了就會出現各種問題。還是那句話: 該踩的坑一個都不會少! 如果遇到問題了可以看看下面列舉出來的常見的 TROUBLESHOOTING 。
- 如果你在執行
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-ip
。 - SSH 服務端可能配置了不允許公鑰授權登入。檢視伺服器上的 /etc/ssh/sshd_config 檔案裡是否配置正確:
PubkeyAuthentication yes
- SSH 服務端可能配置了不允許 root 使用者登入。檢視伺服器上的 /etc/ssh/sshd_config 檔案,其中如果包含
PermitRootLogin no
則將其改為 yes
基本原理
一張時序圖最能說明問題了 :P