理想案例
假设一切都很顺利的话,最简单的方式如下:
- 使用
ssh-keygen
命令在本地生成一对密钥(Public/Private Key) - 使用
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。