在登录远程开发机要一直输入登录密码挺让我厌烦的,因此搞下免密登录,顺便了解下ssh的原理。
如何设置免密登录
- 在本地使用命令
ssh-keygen -t rsa
生成公钥id_rsa
和私钥id_rsa.pub
文件,生成的文件在目录~/.ssh/
下; - 将公钥通过
scp
(或其他发生)复制公钥文件id_rsa.pub
到远程开发机上; - 通过命令
cat id_rsa.pub >> ~/.ssh/authorized_keys
添加到文件authorized_keys
上,确保该文件的权限为可读可写; - 现在可以免密登录远程开发机了。
ssh登录原理
ssh的登录原理其实就是利用非对称公私钥来验证身份
ssh密码登录
- 客户端A像服务器B发起ssh连接;
- 服务器B将自己的公钥发送给客户端A(客户端会将该信息记录到文件
~/.ssh/known_hosts
,下次会将服务器给的公钥和记录的进行比较,不一致就会发出警告); - 客户端A将用户名和密码通过服务器B的公钥进行加密,发送给服务器B;
- 服务器B利用自身的私钥对客户端A发送的数据进行解密,并验证用户名和密码是否正确。
ssh密钥登录
- 客户端A发起ssh连接并将用户名等信息发送给服务器B;
- 服务器B在本地文件
authorized_keys
是否有客户端A的公钥文件; - 如果存在公钥文件,那么服务器B会生成一个随机字符串,并用客户端A的公钥文件进行加密,发送给客户端A;
- 客户端A用自己的私钥进行解密,并将解密结果发送给服务器B;
- 服务器B将客户端A解密的结果跟之前生成的字符串进行比较,若相同,则允许直接登录。