批量部署服务器时,若每台服务器有登陆密码,一个个输入就不是自动化部署了,所以我们需要免密码登陆。
下面,我们了解SSH免密登陆。
他有两个密钥组成:
Public Key:公钥
Private Key:私钥
公钥是公开出去的,私钥是我们自己保管的。他们是成对使用的,如果我们用公钥加密的数据。只有通过对应私钥才能解密成功,反过来,通过私钥加密的数据,只有通过对应公钥才能解密。
实现如上图,用户需要从服务器获取数据时,服务器先用对应公钥加密一段数据发给用户,用户能用私钥解密的话,表示他们两者可以互通。
尤其要注意,私钥要保管好,不要外泄。
涉及两个命令:
生产密钥对:
ssh-keygen
将公钥放到服务器上:
ssh-copy-id
下面的代码,要远程连接服务器,还需要输入密码:
ssh [email protected]
创建密钥对:
ssh-keygen
弹出保存位置确认,点击回车继续,之后也全部回车。
此时生成两个文件:
查看目录:
发送公钥到服务器:
ssh-copy-id [email protected]
需要输入服务器密码。
此时,再用ssh [email protected]
就不需要密码即可登陆了。
了解ssh原理后,我们来了解Ansible这个远程运维工具。
Ansible是一个python开发的ssh运维工具,使用它我们可以很方便的同时在多台服务器上去执行维护任务,是一个非常简单的运维工具。
安装(apt install -y ansible
为python2的版本,之后要停止维护了):
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
cd /etc/ansible
ls
编辑hosts vi hosts
[web]
172.31.88.131
172.31.88.133
[db]
#172.31.88.132
每一个 [ ] 表示一个分组。
查看服务器时间和负载情况:
uptime
查看远程服务器的情况:
ansible all -m raw -a 'uptime'
如果没有做ssh免密,此时会失败,做了之后可以直接得到远程服务器的时间和负载情况。
说明:ansible [1] -m [2] -a [3]
1:选择配置文件的IP:all表示全部ip,还可以输入一个组的,例如上述的web.
2:选择的模块
3:所需要的参数
ping模块:测试连接可通性,没有参数。通的话返回pong。没有安装python则会失败。
ansible all -m ping
一般部署之前会用ping检查python环境是否装好,没有装好的话,远程安装:
ansible all -m raw -a 'apt update && apt install -y python'
script模块:将本地脚本复制到远程主机,并执行。
ansible all -m script -a "./hello.sh"
该模块在初始化部署服务器的时候常用,比如安装python,安装uwsgi等,用一个文件保存所有语句,放到远程服务器执行。
command模块:用于在远程执行命令。和raw很像,不同的是command需要有python的环境
ansible all -m command -a "uptime"
该模块比raw更推荐使用,它也是默认的模块,上面的代码可以省略为ansible all -a "uptime"
。
copy模块:用于复制文件到远程服务器指定位置
ansible all -m copy -a "src=./test.sh dest=/temp"
表示把./test.sh文件拷贝到远程服务器/temp目录下
file模块:设定文件属性和创建文件的符号链接
ansible all -m file -a "path=/temp/test.sh mode=0755"
表示把远程服务器上路径为/temp/test.sh的文件权限设置为可执行(默认创建的文件没有可执行权限)。
shell模块:执行远程机器上的文件
ansible all -m shell -a "/temp/test.sh"
表示执行远程服务器上路径为/temp/test.sh的文件。
fetch模块:将远程服务器上的文件下载到本服务器。
ansible all -m fetch -a "src=/temp/test.sh dest=/download"
表示将远程服务器上路径为/temp/test.sh的文件下载到本服务器/download目录下,每个远程服务器以ip地址为文件夹,进入目录后,temp下有一个test.sh文件。
常用模块:https://www.cnblogs.com/happy-king/p/9013312.html