ssh-keygen 秘钥登录
最后更新于:2022-04-02 03:51:39
[TOC]
## 概念
### 密钥是什么
密钥(key)是一个非常大的数字,通过加密算法得到。对称加密只需要一个密钥,非对称加密需要两个密钥成对使用,分为公钥(public key)和私钥(private key)
### 密钥登录的过程
SSH 密钥登录分为以下的步骤,整个流程是自动的。
0. 预备步骤,客户端生成自己的公钥和私钥
1. 客户端的公钥放入远程服务器的指定位置。
2. 服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。
3. 客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。
4. 服务器收到客户端发来的加密签名后,使用对应的公钥解密,然后跟原始数据比较。如果一致,就允许用户登录。
### 参数说明
```
-b 参数指定密钥的二进制位数,-b至少应该是1024,更安全一些可以设为2048或者更高
-C 参数可以为密钥文件指定新的注释
如: -C "your_email@domain.com" or -C "test key"
-f 参数指定生成的私钥文件
如: ssh-keygen -t dsa -f mykey
会在 当前目录生成私钥文件mykey和公钥文件mykey.pub
-F 参数检查某个主机名是否在known_hosts文件里面
如: ssh-keygen -F example.com
-N 参数用于指定私钥的密码
如: ssh-keygen -t dsa -N secretword
-p 参数用于重新指定私钥的密码(passphrase)
与-N的不同之处在于,新密码不在命令中指定,而是执行后再输入
-R 参数将指定的主机公钥指纹移出known_hosts文件
如: ssh-keygen -R example.com
-t 参数用于指定生成密钥的加密算法,一般为dsa或rsa
```
## 操作流程
### 生成密钥
方式一: dsa
```
ssh-keygen -t dsa
```
生成秘钥`~/.ssh/id_dsa`,生成公钥`~/.ssh/id_dsa.pub`
方式二: rsa
```
ssh-keygen -t rsa
```
生成秘钥`~/.ssh/id_rsa`,生成公钥`~/.ssh/id_rsa.pub`
生成密钥以后,建议修改它们的权限,防止其他人读取
```
$ chmod 600 ~/.ssh/id_rsa
$ chmod 600 ~/.ssh/id_rsa.pub
```
### 上传公钥
#### 手动上传
你要以哪个用户的身份登录到服务器,密钥就必须保存在该用户主目录的`~/.ssh/authorized_keys`文件
手动上产
```
cat ~/.ssh/id_rsa.pub | ssh root@192.168.0.126 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
```
设置为只有自己可写
```
chmod 644 ~/.ssh/authorized_keys
```
#### ssh-copy-id 自动上传公钥
```
ssh-copy-id -i key_file user@host
```
>[info] 公钥文件可以不指定路径和.pub后缀名,ssh-copy-id会自动在~/.ssh目录里面寻找
## 场景
### 生成ssh 证书
`ssh-keygen -t rsa -P ''
`
### 管理机的秘钥发给其他节点
```
# ssh-keygen -t rsa -P ''
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.111
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.229
// ssh 连接
# ssh root@192.168.0.111
//or
# ssh -i ~/.ssh/id_rsa root@192.168.0.111
```
';