Linux系统实现ansible自动化安装配置httpd的方法
提示:我们在主机清单上配置了所管控的主机地址,但是直接用ansible的ping模块去探测主机的存活情况,却显示权限拒绝。从提示上说让我们要指定用什么验证。默认情况ansible是通过ssh的key验证的,所以我们在ansible的主机清单中配置了管控主机的ip是不够的,还要配置ssh基于KEY验证
2)配置管控主机能够基于SSHkey验证
[root@test~]#ipasenp2s0 2:enp2s0:mtu1500qdiscpfifo_faststateUPgroupdefaultqlen1000 link/ether00:30:18:51:af:3cbrdff:ff:ff:ff:ff:ff inet192.168.0.99/24brd192.168.0.255scopeglobalnoprefixrouteenp2s0 valid_lftforeverpreferred_lftforever inet172.16.1.2/16brd172.16.255.255scopeglobalnoprefixrouteenp2s0:0 valid_lftforeverpreferred_lftforever inet6fe80::230:18ff:fe51:af3c/64scopelink valid_lftforeverpreferred_lftforever [root@test~]#ssh-keygen Generatingpublic/privatersakeypair. Enterfileinwhichtosavethekey(/root/.ssh/id_rsa): Createddirectory'/root/.ssh'. Enterpassphrase(emptyfornopassphrase): Entersamepassphraseagain: Youridentificationhasbeensavedin/root/.ssh/id_rsa. Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub. Thekeyfingerprintis: SHA256:UORxi5JhiKDBOhZP3FsbsZfyCjqUcjwqdl1qcnTyGswroot@test Thekey'srandomartimageis: +---[RSA2048]----+ |+.....oo=.| |.+.o.oB.+..| |o+*o=o.| |o.....++| |.o*+oS.| |=BB.| |.o=Eo| |o.=o| |.| +----[SHA256]-----+ [root@test~]#ssh-copy-id192.168.0.99-p41319 /bin/ssh-copy-id:INFO:Sourceofkey(s)tobeinstalled:"/root/.ssh/id_rsa.pub" Theauthenticityofhost'[192.168.0.99]:41319([192.168.0.99]:41319)'can'tbeestablished. ECDSAkeyfingerprintisSHA256:W2pD2PA2K9tGKGVK+weiINcVESkUaHjsTI263OVqBh4. ECDSAkeyfingerprintisMD5:3a:f8:c9:b1:63:c6:c1:ae:e0:6e:e2:ca:17:4a:20:7a. Areyousureyouwanttocontinueconnecting(yes/no)?yes /bin/ssh-copy-id:INFO:attemptingtologinwiththenewkey(s),tofilteroutanythatarealreadyinstalled /bin/ssh-copy-id:INFO:1key(s)remaintobeinstalled--ifyouarepromptednowitistoinstallthenewkeys root@192.168.0.99'spassword: Numberofkey(s)added:1 Nowtryloggingintothemachine,with:"ssh-p'41319''192.168.0.99'" andchecktomakesurethatonlythekey(s)youwantedwereadded. [root@test~]#scp-r.ssh192.168.0.10:~/ Theauthenticityofhost'192.168.0.10(192.168.0.10)'can'tbeestablished. ECDSAkeyfingerprintisSHA256:EG9nua4JJuUeofheXlgQeL9hX5H53JynOqf2vf53mII. ECDSAkeyfingerprintisMD5:57:83:e6:46:2c:4b:bb:33:13:56:17:f7:fd:76:71:cc. Areyousureyouwanttocontinueconnecting(yes/no)?yes Warning:Permanentlyadded'192.168.0.10'(ECDSA)tothelistofknownhosts. root@192.168.0.10'spassword: id_rsa100%1675677.0KB/s00:00 id_rsa.pub100%391207.6KB/s00:00 known_hosts100%35612.2KB/s00:00 authorized_keys100%39112.6KB/s00:00 [root@test~]#
提示:做ssh基于key验证需要在ansible主机上做,我上面是现在ansible主机上生成一对ssh密钥,然后通过ssh-copy-id把公钥复制给本机生成authorized_keys文件,然后在把.ssh目录复制给远端客户机,这样一来ansible主机可以通过ssh基于key免密登录远端客户机,同时远端客户机也可以通过ssh免密登录ansible主机,这样就实现了双向的ssh基于key验证,如果你只想单向的通过ssh基于key认证,你可以在ansible主机上生成密钥对,然后把公钥发给对方即可。有关ssh基于key认证的详细说明请参考本人博客https://www.nhooo.com/article/180381.htm
测试:用ansible主机通过ssh远程客户端主机
[root@test~]#ssh192.168.0.10 Lastlogin:MonJan2704:58:462020from192.168.0.99 [root@test-centos7-node1~]#ipa 1:lo:mtu65536qdiscnoqueuestateUNKNOWNqlen1 link/loopback00:00:00:00:00:00brd00:00:00:00:00:00 inet127.0.0.1/8scopehostlo valid_lftforeverpreferred_lftforever inet6::1/128scopehost valid_lftforeverpreferred_lftforever 2:ens33: mtu1500qdiscpfifo_faststateUPqlen1000 link/ether00:0c:29:f2:82:0cbrdff:ff:ff:ff:ff:ff inet192.168.0.10/24brd192.168.0.255scopeglobalens33 valid_lftforeverpreferred_lftforever inet6fe80::20c:29ff:fef2:820c/64scopelink valid_lftforeverpreferred_lftforever [root@test-centos7-node1~]#exit 登出 Connectionto192.168.0.10closed. [root@test~]#
提示:可以看到ansible主机能够正常免密登录远端主机,接下我们在用ansible的ping模块去探测下被管控主机的存活
提示:能够看到用ansible的ping模块去探测远端主机的存活,返回的状态是SUCCESS,数据是pong说明对端主机上存活的
到此ansible的环境就准备好了,接下来写playbook来安装httpd
[root@test~]#catinstall_httpd.yml --- -hosts:websers remote_user:root tasks: -name:copyepelfile copy:src=/etc/yum.repos.d/CentOS-Base.repodest=/etc/yum.repos.d/CentOS-Base.repo -name:installhttpd yum:name=httpd -name:starthttpd service:name=httpdstate=startedenabled=yes [root@test~]#ansible-playbook-Cinstall_httpd.yml PLAY[websers]*********************************************************************************************************** TASK[copyepelfile]**************************************************************************************************** changed:[192.168.0.10] TASK[installhttpd]***************************************************************************************************** changed:[192.168.0.10] TASK[starthttpd]******************************************************************************************************* changed:[192.168.0.10] PLAYRECAP*************************************************************************************************************** 192.168.0.10:ok=3changed=3unreachable=0failed=0 [root@test~]#
提示:以上playbook的主要内容是把本机的yum源复制到远端服务器上,然后通过yum去安装httpd包,最后启动httpd;在写好playbook后,我们用ansible-playbook-Cinstall_httpd.yml命令对我们写的playbook进行了测试,没有问题,接下来我们使用ansible-playbook来安装httpd
[root@test~]#ansible-playbookinstall_httpd.yml PLAY[websers]*********************************************************************************************************** TASK[copyepelfile]**************************************************************************************************** changed:[192.168.0.10] TASK[installhttpd]***************************************************************************************************** changed:[192.168.0.10] TASK[starthttpd]******************************************************************************************************* changed:[192.168.0.10] PLAYRECAP*************************************************************************************************************** 192.168.0.10:ok=3changed=3unreachable=0failed=0 [root@test~]#
提示:从ansible-playbook对playbook的执行状态来看是成功了,接下来我们直接使用浏览器来访问192.168.0.10,看看httpd是否已经能够正常访问,如果能正常访问说明httpd已经安装好了
提示:可以看到我们用浏览器是直接可以访问到192.168.0.10的测试页面,说明httpd在192.168.0.10上安装成功
[root@test~]#catx_com.confServerNamewww.X.com DocumentRoot"/web/vhosts/x" [root@test~]#OptionsNone AllowOverrideNone Requireallgranted ErrorLog"logs/x.err" CustomLog"logs/x.access"combined
提示:我们在ansible主机上把配置文件建立好,待会直接用ansible把文件推送到对应主机的对应目录下即可使用
[root@test~]#caty_com.confServerNamewww.Y.com DocumentRoot"/web/vhosts/y" [root@test~]#OptionsNone AllowOverrideNone Requireallgranted ErrorLog"logs/www2.err" CustomLog"logs/y.access"combined
[root@test~]#catx_index.htmlwww.X.com
[root@test~]#caty_index.htmlwww.Y.com
[root@test~]#
提示:以上文件在ansible主机上准备好了以后,我们接下来写一个playbook把对应的文件直接推送到远端主机即可
[root@test~]#catset_virtualhost_conf_file.yml --- -hosts:websers remote_user:root tasks: -name:mkdirvirtualhostdocumentrootdirectory shell:mkdir-p/web/vhosts/{x,y} -name:copyx_com.conftoremotehost copy:src=/root/x_com.confdest=/etc/httpd/conf.d/x_com.conf -name:copyx_comindexfile copy:src=/root/x_index.htmldest=/web/vhosts/x/index.html -name:copyy_com.conftoremotehost copy:src=/root/y_com.confdest=/etc/httpd/conf.d/y_com.conf -name:copyy_comindexfile copy:src=/root/y_index.htmldest=/web/vhosts/y/index.html [root@test~]#
提示:以上文件的内容主要把我们建立好的配置文件推送到对应主机的对应目录,接下来我们来检查下我们写的playbook是否语法问题
[root@test~]#ansible-playbook-Cset_virtualhost_conf_file.yml PLAY[websers]*********************************************************************************************************** TASK[mkdirvirtualhostdocumentrootdirectory]************************************************************************** skipping:[192.168.0.10] TASK[copyx_com.conftoremotehost]************************************************************************************* changed:[192.168.0.10] TASK[copyx_comindexfile]********************************************************************************************* changed:[192.168.0.10] TASK[copyy_com.conftoremotehost]************************************************************************************* changed:[192.168.0.10] TASK[copyy_comindexfile]********************************************************************************************* changed:[192.168.0.10] PLAYRECAP*************************************************************************************************************** 192.168.0.10:ok=4changed=4unreachable=0failed=0 [root@test~]#
提示:测试playbook没有问题,接下来我们来运行playbook,把对应的文件推送到httpd服务器上,然后在服务器上检查我们写的配置文件是否正确
[root@test~]#ansible-playbookset_virtualhost_conf_file.yml PLAY[websers]*********************************************************************************************************** TASK[mkdirvirtualhostdocumentrootdirectory]************************************************************************** [WARNING]:Considerusingfilemodulewithstate=directoryratherthanrunningmkdir changed:[192.168.0.10] TASK[copyx_com.conftoremotehost]************************************************************************************* changed:[192.168.0.10] TASK[copyx_comindexfile]********************************************************************************************* changed:[192.168.0.10] TASK[copyy_com.conftoremotehost]************************************************************************************* changed:[192.168.0.10] TASK[copyy_comindexfile]********************************************************************************************* changed:[192.168.0.10] PLAYRECAP*************************************************************************************************************** 192.168.0.10:ok=5changed=5unreachable=0failed=0 [root@test~]#
提示:从上面的返回状态看,都是成功的,只是第一个任务提示我们使用file模块去创建目录会更好一些,接下来我们使用ansible的shell模块去检查远端服务器上的配置文件的语法是否正确
[root@test~]#ansiblewebsers-mshell-a'httpd-t' 192.168.0.10|SUCCESS|rc=0>> AH00558:httpd:Couldnotreliablydeterminetheserver'sfullyqualifieddomainname,usingfe80::20c:29ff:fef2:820c.Setthe'ServerName'directivegloballytosuppressthismessage SyntaxOK [root@test~]#
提示:我们利用ansible在远程主机上检查httpd的配置文件语法是没有问题,它提示我们没有servername,这个提示可以不用管它,如果你觉得非要处理一下也可以,在httpd的主配置文件中找到ServerName把对应的servername配置上就好了;接下来我们重启httpd,然后在客户机上访问两个虚拟主机
[root@test~]#ansiblewebsers-mshell-a'systemctlrestarthttpd' 192.168.0.10|SUCCESS|rc=0>> [root@test~]#
在客户端上更改/etc/hosts文件,让其访问www.X.com和www.Y.com能够解析到远程主机
[root@test~]#cat/etc/hosts 127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4 ::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6 192.168.0.10www.X.comwww.Y.com [root@test~]#
测试:利用curl分别访问两个虚拟主机,看看对应的主页文件内容是否不同
[root@test~]#curlhttp://www.X.com/index.htmlwww.X.com
[root@test~]#curlhttp://www.Y.com/index.htmlwww.Y.com
[root@test~]#
提示:我们利用curl对其各自虚拟主机的主页文件访问,都能看到对应的主页文件内容,当然你也可以更改Windows的hosts文件,把对应的解析内容写进去,然后通过Windows浏览器也是可以的,如下所示:
提示:在windows上找到hosts文件,然后把对应的记录添加进去,如下
提示:接下来我们利用Windows的浏览器来访问下两个虚拟主机
接下我们在看看httpd服务器的日志是否都已生成
[root@test~]#ansiblewebsers-mshell-a'ls-l/var/log/httpd' 192.168.0.10|SUCCESS|rc=0>> 总用量16 -rw-r--r--.1rootroot26681月2706:30access_log -rw-r--r--.1rootroot29401月2707:34error_log -rw-r--r--.1rootroot01月2707:38www2.err -rw-r--r--.1rootroot5001月2707:52x.access -rw-r--r--.1rootroot01月2707:38x.err -rw-r--r--.1rootroot5001月2707:52y.access [root@test~]#ansiblewebsers-mshell-a'cat/var/log/httpd/x.access' 192.168.0.10|SUCCESS|rc=0>> 192.168.0.99--[27/Jan/2020:07:39:15-0500]"GET/index.htmlHTTP/1.1"20020"-""curl/7.29.0" 192.168.0.232--[27/Jan/2020:07:52:31-0500]"GET/HTTP/1.1"20020"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/69.0.3497.100Safari/537.36" 192.168.0.232--[27/Jan/2020:07:52:31-0500]"GET/favicon.icoHTTP/1.1"404209"http://www.x.com/""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/69.0.3497.100Safari/537.36" [root@test~]#ansiblewebsers-mshell-a'cat/var/log/httpd/y.access' 192.168.0.10|SUCCESS|rc=0>> 192.168.0.99--[27/Jan/2020:07:39:19-0500]"GET/index.htmlHTTP/1.1"20020"-""curl/7.29.0" 192.168.0.232--[27/Jan/2020:07:52:48-0500]"GET/HTTP/1.1"20020"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/69.0.3497.100Safari/537.36" 192.168.0.232--[27/Jan/2020:07:52:48-0500]"GET/favicon.icoHTTP/1.1"404209"http://www.y.com/""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/69.0.3497.100Safari/537.36" [root@test~]#
提示:可以看到httpd服务器上都已经生成了对应名称的日志文件。
总结
以上所述是小编给大家介绍的Linux系统实现ansible自动化安装配置httpd的方法,希望对大家有所帮助!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。