一、SSH 简介
SSH 是 Secure Shell 的简称,也称安全外壳协议。主要目的是实现安全远程登陆。
二、SSH 工作原理
对数据的加密方式主要有两种:
- 对称加密(密钥加密)(AES、DES)
- 非对称加密(公钥加密)(RSA、DSA)
对称加密
对称加密指加密解密使用的是同一个密钥。
- 优点:速度快,对称加密通常在消息发送方需要加密大量数据时使用;算法公开,计算量小,加密效率高。
- 缺点:非安全信道中通信时,密钥交换不安全;需要保存的密钥数量增多,不便于管理。
非对称加密
由一对密钥由公钥和私钥组成,公钥私钥可以互相加密解密。
- 优点:只交换公钥保证了私钥不外泄。
- 缺点:速度较慢。
SSH 工作原理中,使用了RSA非对称加密算法。
1. SSH初次交换公钥
- 客户端发起链接请求
- 服务端返回自己的公钥及会话ID
- 客户端生成密钥对
- 客户端用自己的公钥异或会话ID,计算出Res,并用服务端的公钥加密
- 客户端发送加密后的值到服务端,服务端用私钥解密得到Res
- 服务端用解密后得到的值异或会话ID,计算出客户端的公钥
- 最终:双方各自持有3个密钥,自己的一对密钥和对方的公钥
2. SSH 加密原理
3. SSH 服务登录的常用验证方法
- 用户/口令
- 密钥
基于用户/口令的登录验证
- 客户端与服务器交换公钥。
- 客户端利用服务器的公钥对登录密码加密,发送登录请求到服务器。
- 服务器用私钥解密得到登录密码,密码正确则登录成功。
基于密钥的登录验证
- 在客户端生成一对密钥。
- 将公钥拷贝到服务器。
- 当客户端再次发送连接请求,包括 IP、用户名。
- 服务器得到请求后,在authorized_keys中查找,如果有响应的IP和用户,则生成一个随机字符串。
- 服务器使用拷贝过来的公钥加密随机字符串,发送给客户端。
- 得到从服务端发送的数据,客户端用私钥解密,将解密后的字符串发给服务器。
- 服务器接收来自客户端的字符串后,与之前的字符串对比,如果一致,就允许免密码登录。
5. 使用 openssh 生成密钥对
生成密钥对: ssh-keygen -t rsa -b 4096 -P "" -C "root@ubuntu" -f id_rsa
参数 | 说明 |
-t | 密钥类型,rsa | dsa,默认为 rsa。 |
-m | 编码格式,rfc-4716 | pkcs8 | pem,默认为 pem。 |
-b | 密钥长度,RSA最小要求768位,默认为2048位;DSA必须是1024位。 |
-P | 提供旧的私钥密码,空则表示不需要密码。 |
-N | 提供新的私钥密码,空则表示不需要密码。 |
-C | 提供备注,默认为当前用户名@主机名 |
-f | 生成密钥的文件路径,默认为 id_rsa(私钥)id_rsa.pub(公钥) |
自动上传公钥: ssh-copy-id -i id_rsa.pub username@host
- 拷贝公钥到服务端
~/.ssh
目录下,并更名为authorized_keys
或在追后一行增加公钥 -i
可指定公钥文件,默认为id_rsa.pub
重启服务器ssh服务:systemctl restart sshd
客户端通过ssh命令远程登录服务器:ssh -i id_rsa username@host
-i
可指定私钥文件,默认为id_rsa