SSH
SSH 是一种用于计算机之间通信的网路协议,用于加密登录,登录命令:ssh [-p xxx] user@host
登录过程
- 请求:远程主机收到用户的登录请求,把自己的公钥发给用户;
- 加密:用户使用这个公钥,将登录密码加密后发送回来;
- 验证:远程主机用自己的私钥解密登录密码,验证登录;
中间人攻击
攻击过程:如果用户和服务器的登录过程被截获,中介人冒充服务器给用户发送公钥,中间人就可以使用自己的私钥获取用户密码。
应对方案:在首次登录服务的时候,系统会提示确认主机的公钥指纹,公钥指纹一般都会发布在服务官方网站,确认一致之后,既可以确认输入密钥登录。在确认之后系统会将指纹写入到~/.ssh/known_hosts中,下次登录会检查该文件,如果已经确认就不会继续提示。
公钥登录
每次都使用密码登录非常麻烦,SSH 提供了公钥登录,可以省去密码输入:
- 用户自己生成密钥对,将公钥存储在远程主机;
- 登录的时候,远程主机会发送一段随机字符串
- 用户使用自己的私钥加密字符串后再返回给远程主机
- 远程主机使用事先上传的公钥进行解密,解密成功完成登录
使用 ssh-keygen 生成秘钥对
- 运行
ssh-keygen,一路回车,可以设置密码,运行结束后在~/.ssh/目录下会生成公钥id_rsa.pub和私钥id_rsa两个文件 - 运行
ssh-copy-id [-p xxx] user@host上传公钥到服务器
配置文件
~/.ssh/id_rsa.pub:公钥~/.ssh/id_rsa:私钥~/.ssh/known_hosts:客户端存储已经确认的公钥指纹/etc/ssh/sshd_config:ssh 服务配置~/.ssh/authorized_keys:服务端存储客户端公钥