Ansible安装及树莓派系统初始化示例

前言:

关键字:Raspberry Pi、Ansible、自动化运维;

Ansible是一款目前比较热门的自动化运维工具,其应用方向基本上是面向需要大批量的进行系统配置的运维人员,或经常性需要部署某一类服务的系统工程师。虽然说Ansible适合所有人使用,但博主依然认为Ansible不太适合个人使用,原因是,个人的服务配置,一般都是单一的一次性的安装配置过程,在这一情况下,从键盘敲入几条命令显然要比写一份Ansible的配置文件简单得多,而这个所谓的“简单”,甚至是建立在你已经会使用Ansible的基础上!如果再算上学习Ansible的时间成本,那么我认为,如果为了搭建某几个仅需要一次性部署的服务,而特别的去学习Ansible的使用与YAML文件编写,那博主会认为这是一个XX的选择~

尽管上面博主如此评价Ansible,但无论如何,这毕竟是一篇关于Ansible的文章,所以博主依然希望文章能对读者有点帮助,或者说给读者一些可以体验Ansible的东西,所以~博主顺便写了个对树莓派初始系统的进行优化的“PlayBook”[Ansible称这种用于配置远程主机系统环境的配置文件为“PlayBook”]。这一“PlayBook”包括了一系列的将在远程主机/本地主机上执行的任务,以帮助你对原有树莓派初始系统进行一些基本的优化/修改,这些优化/修改能帮助你提高系统的安全性、个性化你的树莓派、更适合中国区域使用[软件源设定]等。

关于本文所提供的“PlayBook”文件的使用说明,见下文~

另注:本文所提供的下载文件 --> Init_Rasp.tar.gz

一、硬件与软件环境

本教程在以下环境下搭建测试通过!由于Ansible的使用比较特别,所以本博文中使用了两台树莓派做演示,即一台树莓派用于安装Ansible作为服务器,另一台树莓派用于测试。当然,很多情况下,实际上读者手上只会有一台树莓派,所以本文也会介绍如何在单台树莓派上进行操作[见下文],但无论如何,要使用本文所提供的初始化PlayBook,Ansible服务是必需安装的~

  • 主硬件 :Raspberry Pi 4B  [服务器]

  • 从硬件 :Raspberry Pi 3B  [测试主机]

  • 操作系统 :Raspbian Buster Lite

  • Ansible版本 :2.9.10

  • 测试日期:2020年07月20日

二、配置及安装

假设以下为一个全新配置的树莓派操作系统,系统版本为“Raspbian Buster Lite”;在安装Ansible之前,我们需要一个非必要的操作,更换树莓派上默认使用的“Python”版本~在树莓派的官方操作系统上,“python”命令[实际上这是一个软链接文件]默认指向/使用“Python 2.x”,但PYTHON官方已于2020年1月1日停止了对“Python 2.x”的技术支持,所以,在安装依赖“python”的服务时,我们尽量使用“python 3.x”的版本,有关的命令如下,包括更换与还原操作;

在完成了默认使用的“python”版本设定后,继续进行Ansible服务的部署;博主严重建议使用“python 3.x”版本;Ansible服务的部署完全没难度,基本上有四种安装方法。1.直接从系统中的内置软件源安装[版本较旧];2.依据官方文档的安装方法从官方指定的软件源安装[版本较新并且稳定];3.从GITHUB下载TAR包/ZIP包进行安装[你可以选择任何已发布的版本];4.利用官方开源的源码安装[最新并不保证稳定性];以下为四种安装方法的介绍,读者可按需要选择使用~

1、直接从系统中的内置软件源安装;

2、依据官方文档的安装方法从官方指定的软件源安装[推荐];

3、从GITHUB下载TAR包/ZIP包进行安装[不建议];

4、利用官方的源码进行安装[不建议];

以上简单说明了四种安装方法,仅供参考,实际安装过程中还需要考虑系统上"Python"的版本问题;个人建议方法二,简单官方安全~但官方也不是万能的,比如说,在博主写这篇文章时,官方就没有提供基于ARMHF硬件架构的,依赖"Python 3.x"的ANSIBLE;

三、PlayBook概念结构[因手残而被自己删掉]

本处博主原本是想写一下Ansible服务的“PlayBook”文件的概念,以方便读者了解后面将要执行的“PlayBook”文件[Init_Rasp.yml],但无奈博主在写了约一个小时之后,不小心在浏览器上执行了页面后退操作,于是一个小时写的东西全没了,而博主也不想再重新写了……有关PlayBook的概念于结构,博主可能在下一篇博文再写吧,如果想了解此部分内容,见《暂不 存在》……

四、Ansible项目文件

在此之前,博主已经在“Raspberry Pi 4B”上安装/部署了Ansible软件/服务,之后,又为“Raspberry Pi 3B”烧录了一个全新的基于官方的操作系统[已启用SSH功能],现在,博主将要利用Ansible服务,对“Raspberry Pi 3B”的初始操作系统进行优化[更安全更适合中国区域使用];

在进行操作之前,先对本文所提供的下载文件[Init_Rasp.tar.gz]作一个简单的说明,目录结构;

“ansible.cfg”文件,可配置项非常多,但在使用上并不会在此定义太多的配置项,本文件中比较重要的就是定义服务器文件清单的位置;

“inventory”文件[服务器清单],定义PlayBook中任务,将会在那些主机上执行;本处的IP需要按实际情况进行修改。另外,可配置项也是非常多,但一般不使用;本处只定义了一项,即树莓派“pi”用户所使用的默认密码“ansible_password=raspberry”;如果你有数台树莓派的操作系统需要同时进行相同的优化操作,可以往"[raspberry]"组中增加任意数量的主机;

“Init_Rasp.yml”文件,这就是所谓的PlayBook了;这份文件中的内容比较多,包括了变量定义、任务以及一些各种各样的配置项:

注意:以上代码并没有任何错误,但严重不建议以复制粘贴的方式创建相关文件,建议下载本文所提供的文件然后进行修改;

原因:使用复制粘贴的方式复制配置至文件内,所有空格的前面将可能存在不可见的字符"M-BM-",造成文件不可用,这是字符编码的问题~若必需使用复制粘贴方式,请务必手动替换掉配置项中的所有空格!!!或使用以下命令过滤掉所有"M-BM-"字符~

五、PlayBook测试/使用说明[树莓派初始状态优化]

在进行使用之前,你需要:

1、将从本博文的下载到的"Init_Rasp.tar.gz"文件上传到Ansible服务器[本文设备为:"Raspberry Pi 4B"]内,并执行"tar -zxvf Init_Rasp.tar.gz"解压;

2、执行"cd Init_Rasp"进入对应目录;

3、执行"nano inventory"命令修改目录内的"inventory"文件中的远程主机的IP地址;本示例中"Raspberry Pi 3B"的IP地址为"192.168.100.105";

4、保证"Raspberry Pi 3B"已启用SSH功能,并能被ANSIBLE服务器连接[处于同一网段];

在完成以上操作后,执行以下命令开始对"Raspberry Pi 3B"进行初始状态优化:

在执行完以上命令后,会要求你输入一些变量,直接回车使用默认值,依次为:

A、你希望使用的树莓派主机名称;默认值:FionaWong

B、你希望创建的新用户的名称[代替"pi"用户];默认值:Edward

C、设定新用户的密码;默认值:12345678

D、是否启用SSH的公钥登录方式[输入任意不等于"1"的值启用,例如"2"];默认值:1

在完成以上变量的自定义后,你将能从ANSIBLE服务器上看到各个任务的执行状态,其中:黄色-->表示执行成功并产生数据变更、绿色-->表示执行成功但未产生数据变更、浅蓝色-->表示跳过该任务[未执行]、红色-->表示任务执行失败;博文所提供的PlayBook[即"Init_Rasp.yml"]执行状态如下图所示:

本PlayBook执行完成后分两种状态:

I 、未使用SSH公钥认证功能:此情况下未对SSH服务进行配置修改,设备重启后,默认"pi"用户已被锁定[不可用状态],并且仅能以"新用户"以传统的SSH登录方式登录设备;

II、已使用SSH公钥认证功能:此情况下,由于SSH服务的配置已变更,所以登录方式已被改变;如使用本文所提供的PlayBook文件[Init_Rasp.yml],并未作修改,SSH的登录方式变更为-->禁用传统的密码登录方式、只能使用公钥谁的方式登录SSH服务、SSH服务端口变更为"10086"、"pi"用户被锁定[不可用状态]、仅能以新用户的身份以公钥认证的方式登录SSH服务;另外,若启用SSH公钥认证功能,在PlayBook执行重启设备的任务时,将会返回任务执行失败的信息,这是正常的,这是由于可登录用户、SSH登录方式、SSH服务端口均已变更所造成的。若重启任务最后返回“SSH服务拒绝连接”的信息,可以认为,SSH服务已按照PlayBook中的设定生效了,见下图:

Ansible安装及树莓派系统初始化示例

六、将PlayBook应用至当前主机

以上操作均是基于服务器对远程主机进行的操作,以下介绍为单台设备的操作,即安装有ANSIBLE服务的树莓派设备,需要对设备自身的操作系统进行初始的系统优化,建议操作如下:

七、关于本文提供的PlayBook中的SSH说明

即关于变量"D"项的说明:由于很多初次接触树莓派的人并不一定了解SSH公钥登录的相关知识,所以本处解释一下本示例用到的,关于"/etc/ssh/sshd_config"文件中的配置项,并对对应的配置项的提供个人建议;

1、PubkeyAuthentication yes

     # "yes"启用公钥登录功能;建议启用;

2、AuthorizedKeysFile /etc/ssh/AuthorizedKeysFile.pub

     # 所使用的公钥文件位置,必须;建议生成个人所属的公私钥文件,见下;

3、port 10086

     # SSH服务所使用的端口;建议使用其它非"22"端口;

4、Protocol 2

     # SSH协议的版本;安全相关,建议使用;

5、LoginGraceTime 2m

     # 连续登录失败后,需要等待多少时间后才可以再次登录;安全相关,建议使用;

6、MaxAuthTries 3

     # 登录错误次数限制;安全相关,建议使用;

7、PasswordAuthentication no

     # "no"时为禁止使用密码登录方式;已经使用了公钥方式时建议设定为"no";

8、PermitRootLogin yes

     # "yes"时为允许root用户使用SSH方式登录;建议按实际需求设定;

     # 建议"no"因为完全可以通过"sudo"或"su"命令代替本功能;

9、PermitRootLogin without-password

     # "without-password"为root用户只允许公钥方式从SSH登录;

     # 只在root用户允许SSH登录时本项才有存在意义;

     # 建议,如果真的需要root用户以SSH方式登录,建议只允许其使用公钥方式登录;

关于本文所提供的下载文件中的"file"目录中的公私钥,原则上直接使用并没有什么问题,毕竟博主给的东西基本不会有人看,也就不会有什么人去使用了;但从安全的角度考虑,使用者应尽可能的替换掉该公私钥,生成替换文件的命令如下,仅供参考:

八、结

~END~

网友评论1

  1. 沙发
    Duncan Schrecengost:

    I reside in Egypt and people here need to know this valuable information, and I have been yours for a long time. The truth is your information is very useful. I hope you continue to publish at this wonderful level for the benefit to prevail.

    2022-02-13 上午4:12 [回复]

发表评论

表情
还能输入210个字

Captcha Code