ssh 公钥认证是ssh认证的方式之一,通过公钥认证可实现ssh免密码登陆,使用场景较多,如github代码提交校验,免密登录远程服务器等。
生成公钥和私钥
默认情况下,~/.ssh目录下会存放当前用户ssh配置认证相关的文件
使用 ssh-keygen命令生成ssh公钥认证所需的公钥和私钥文件1
2
3
4
5
6
7
8
9
10
11
12
13ssh-keygen
指定加密类型
ssh-keygen -t rsa
添加备注信息
ssh-keygen -t rsa -C "comment"
指定文件名
ssh-keygen -t rsa -C "comment" -f "test"
查看私钥对应的公钥信息
ssh-keygen -y -f private_key
免密登录秘钥配置
将公钥发送至服务器
1 | 将公钥加至服务器的authorized_keys文件中(确保该文件权限为600) |
远程登录服务器
1 | SSH 常用连接参数 |
ssh 登录方式
账号密码登录
1 | +-----------+ 1.send ssh request +-----------+ |
- 当客户端发起ssh请求,服务器会把自己的公钥发送给用户;
- 用户会根据服务器发来的公钥对密码进行加密;
- 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
秘钥登录
1 | +------------------+ +------------------+ |
- 首先在客户端生成一对密钥(ssh-keygen);
- 并将客户端的公钥ssh-copy-id 拷贝到服务端;
- 当客户端再次发送一个连接请求,包括ip、用户名;
- 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串
- 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端;
- 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端;
- 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录。