1 为什么要公钥和私钥
1.由于git拉取或推送代码的时候到私钥和公钥进行SSH通信
2.在一套Jenkins部署多台目标机器应用,此时免密远程拷贝代码的时候私钥和公钥进行SSH通信体现尤为重要
2 准备工作
- 这里要演示多台机器进行免密登陆拷贝文件
- 准备两台机器,这里我是在虚拟机安装的2台CentOS操作系统的环境配置情况,你可以根据自己的学习情况进行分配内存和硬盘或你土豪可以准备2台云环境也OK
机器名称 | IP | 内存 | 处理器 | 硬盘 |
---|---|---|---|---|
node1(master) | 192.168.1.235 | 3G | 1核 | 20G |
node2(slave) | 192.168.1.236 | 3G | 1核 | 20G |
3 公钥与公钥的区别
公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。
通过这种算法得到的密钥对能保证在世界范围内是独一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。
4 公钥与公钥通信图解
- 多台机器免密登录的图解
5 公钥与公钥通信原理
- 1、首先在客户端生成一对秘钥(ssh-keygen)
- 2、并将客户端的公钥ssh-copy-id拷贝到服务端
- 3、当客户端再次发送一个连接请求,包括ip用户名
- 4、服务端将使用客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串。如:ABC
- 5、服务端将用户客户端拷贝过来的公钥镜像加密,然后发送给客户端
- 6、得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
- 7、服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果是一致,就允许免密登录
6 公钥与公钥生成&免密登录操作
6.1公钥和私钥生成
- 指定一个名称生成公钥和私钥
ssh-keygen -t rsa -C "root"
- 不指定名称生成公钥和私钥
ssh-keygen -t rsa
下面的操作
一直回车即可.
此操作跟Windows、Mac等系统同等,只不过存储的文件路径不一样.
6.2 免密登录Rsa生成操作
拷贝实现三种方式
- cat命令追加公钥文件内容指定文件
cat id_rsa.pub >> authorized_keys
6.2.1 方法1
- 将master生成的公钥拷贝到slave(从机或副机)指定主机名称进行远程拷贝
scp authorized_keys slave:/root/.ssh/
6.2.2 方法2
- 根据机器IP进行拷贝
scp authorized_keys root@192.168.1.236:/root/.ssh/
scp -p ~/.ssh/id_rsa.pub root@192.168.1.236:/root/.ssh/authorized_keys
6.2.3 方法3
- 通过ssh-copy-id命令进行拷贝
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.236
6.3 开启sshd_config配置(重点
)
【特别说明】开启必要的参数,进入 vim /etc/ssh/sshd_config 配置,此操作非常重要,
由于不同操作系统不一样,网上很多文章资料都没提到此操作
.
StrictModes no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
6.3.1启动ssh服务
/bin/systemctl start sshd.service
6.3.2启动系统
reboot
6.3.3验证说明
- ssh 远程登录,第一次登录需要密码,后面就不需要密码了
ssh slave 或ip
ssh 192.168.1.236
7、总结和参考文章
7.1、总结
1 、以上问题根据搭建Jenkins+GitLab+Git的时候的实际情况进行总结整理,除了技术问题查很多网上资料,通过自身进行学习之后梳理与分享。
2、 在学习过程中也遇到很多困难和疑点,如有问题或误点,望各位老司机多多指出或者提出建议、留言。本人会采纳各种好建议和正确方式不断完善现况,人在成长过程中的需要优质的养料。
3、 希望此文章能帮助你,也希望你看了此文档或者通过找资料进行自己实操学习效果会更好。