ansible批量修改服務(wù)器密碼(ansible sudo 需要密碼)
今天給各位分享ansible批量修改服務(wù)器密碼的知識(shí),其中也會(huì)對(duì)ansible sudo 需要密碼進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧!
本文目錄一覽:
- 1、Ansible安裝配置和基本使用
- 2、使用Ansible實(shí)現(xiàn)自動(dòng)化運(yùn)維的一些技巧
- 3、使用ansible一鍵部署MongoDB分片集群
- 4、ansible模板等使用方法
Ansible安裝配置和基本使用
一、ansible 安裝
ansible 依賴于python2.6或更高的版本、paramiko、PyYAML及Jinja2。
將python頭文件拷貝到標(biāo)準(zhǔn)目錄,以避免編譯ansible時(shí),找不到所需的頭文件
備份舊版本的python,并符號(hào)鏈接新版本的python
修改yum腳本,使其指向舊版本的python,已避免其無(wú)法運(yùn)行
1.1 編譯安裝
解決依賴關(guān)系
解壓安裝包
編譯安裝
拷貝配置文件
1.2 rpm包安裝
使用阿里云鏡像源即可,這里為了方便使用,就直接使用yum安裝了。
Fedora 用戶可直接安裝Ansible, 但RHEL或CentOS用戶,需要 配置 EPEL # yum install -y epel-release # yum install -y ansible
注意:不同版本的ansible的功能差異可能較大。
二、配置
配置文件:/etc/ansible/ansible.cfg
hostfile=/etc/ansible/hosts #指定默認(rèn)hosts配置的位置 host_key_checking = False #不進(jìn)行host_key檢查,省去目標(biāo)key發(fā)生變化時(shí)輸入(yes/no)的步驟 ask_pass=True # 每次執(zhí)行ansible命令是否詢問(wèn)ssh密碼 ask_sudo_pass=True # 每次執(zhí)行ansible命令時(shí)是否詢問(wèn)sudo密碼
主機(jī)清單:/etc/ansible/hosts
主程序:ansible、ansible paly-book、ansible-doc
1、將要管理的主機(jī)納入 /etc/ansible/hosts配置文件中,可以填寫(xiě)IP或是主機(jī)名
[WebServers] 10.10.10.3 10.10.10.4
2、.基于ssh的方式與被管理的主機(jī)進(jìn)行通信,在管理的主機(jī)上(部署ansible的主機(jī)上)生成一對(duì)非對(duì)稱密鑰,將公鑰發(fā)給被管理的主機(jī)。
a,生成密鑰對(duì):ssh-keygen -t rsa
b,將密鑰發(fā)放到要管理的主機(jī):ssh-copy-id -i 10.10.10.3 或 ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.3
3、使用ansible命令測(cè)試
[root@wlm yum.repos.d]# ansible all -m ping 10.10.10.4 | SUCCESS = { "changed": false, "ping": "pong" }
三、基本使用
1、常用命令
ansible-doc 命令:獲取模塊列表、模塊使用格式。
ansible-doc -l :獲取列表
ansible-doc -s module_name:獲取指定模塊信息
2、ansible 命令格式
ansible host-pattern [-f forks] [-m module_name] [-a args]
host-pattern 指明管控主機(jī),以模式表示或者直接指定ip,必須事先指定在文件中;all所有
[-f forks] 指明每批管控多少主機(jī),默認(rèn)是5個(gè)主機(jī)一批次
[-m module_name] 使用何種模塊操作,所有操作都需要通過(guò)模塊指定
[-a args] 指明模塊專用參數(shù);args 一般是 key=value格式。注:command模塊的參數(shù)不是kv模式,而是直接給出要執(zhí)行的命令。
注意:host-pattern 默認(rèn)讀取/etc/ansible/hosts,也可以指明自定義文件路徑 -iPATH,--inventory=PATH:指明使用的 host inventory文件路徑;
3、常用模塊介紹
1、command模塊:遠(yuǎn)程主機(jī)上運(yùn)行命令
例:ansible hosts -m command -a "ls /tmp" 注:command模塊也可以省略。
給遠(yuǎn)程主機(jī)添加用戶、設(shè)置密碼:
ansible hosts -a 'useradd user1'
ansible hosts -a 'echo abc | passwd --stdin user1'
2、shell模塊:遠(yuǎn)程主機(jī)在shell進(jìn)程下運(yùn)行命令,支持shell特性,也支持管道符。
10.10.10.4 | SUCCESS | rc=0
3、copy模塊:把當(dāng)前主機(jī)文件復(fù)制到遠(yuǎn)程主機(jī)位置,可以指定mode、own、group
10.10.10.4 | SUCCESS = { "changed": true, "checksum": "325287cee456533bf76025312e5d05e842cb43a9", "dest": "/root/abc.txt", "gid": 0, "group": "root", "md5sum": "1c6d47c6e4d59c630751b47fff140b89", "mode": "0644", "owner": "ansible", "size": 15, "src": "/root/.ansible/tmp/ansible-tmp-1484639082.19-114656107854348/source", "state": "file", "uid": 0 }
4、cron模塊:在遠(yuǎn)程主機(jī)指定crontab周期性計(jì)劃任務(wù)
minute= hour= day= month= weekday= job= name= (必須填寫(xiě)) state=
ansible all -m cron -a "minute=*/10 job='/sbin/ntpdate 10.10.10.10 /dev/null' name=synctime" 可使用crontab -l查看
在管理的主機(jī)上可以刪除制定的計(jì)劃任務(wù)
10.10.10.4 | SUCCESS = { "changed": true, "envs": [], "jobs": [] }
5、fetch模塊:和copy相反,從遠(yuǎn)程主機(jī)拷貝文件到本地主機(jī)
可以不要flat=yes參數(shù),但作用:
當(dāng)dest=/root/kel/ ,abc.txt會(huì)保存在/root/kel/目錄下
當(dāng)dest=/root/kel ,會(huì)拷貝abc.txt文件,并命名成kel
6、file模塊:file模塊包含了文件、文件夾、超級(jí)鏈接類的創(chuàng)建、拷貝、移動(dòng)、刪除
path=/etc/foo.conf owner=foo group=foo mode=0644
src=/file/to/link/to dest=/path/ro/symlink owner=foo group=foo state=link
src=/tmp/{{item.path}} dest={{item.dest}} state=link with_items:
path=/etc/foo.conf state=touch mode="u=rw,g=w,o=r"
path=/etc/foo.conf state=touch mode="u+w,g-w,o-rw"
7、yum模塊:用于yum安裝安裝和卸載
8、service模塊:服務(wù)管理
9、user/group模塊:user模塊管理用戶;group模塊管理group
四、Playbook劇本
playbook 是ansible更強(qiáng)大的配置管理組件,實(shí)現(xiàn)基于文本文件編排執(zhí)行的多個(gè)任務(wù),且多次重復(fù)執(zhí)行。playbook組織格式為使用YAML語(yǔ)言來(lái)編寫(xiě)的。
playbook 是由一個(gè)或多個(gè)“play”組成的列表。play的主要功能在于將事先歸為一組的主機(jī)裝扮成事先通過(guò)ansible中的task定義好的角色。從根本上講,所謂的task無(wú)非是調(diào)用ansible的一個(gè)module。將多個(gè)play組織在一個(gè)playbook中,即可以讓他們聯(lián)通起來(lái)按事先編排的機(jī)制生效。
1、例子:
在ansible主機(jī)上的root目錄下創(chuàng)建httpd目錄,將本機(jī)的httpd.conf文件拷貝到該目錄下,修改配置文件里的監(jiān)聽(tīng)端口是8081
remote_user:root #root前不能有空格
tasks: #任務(wù)列表
yum name=httpd state=present #yum后的: 刪除掉
copy src=/root/httpd/httpd.conf dest=/etc/httpd/conf
service name=httpd state=started
注意:yaml文件中支持#;下面的操作要跟上面的name對(duì)齊。
測(cè)試:
ansible-playbook --check playbook :只檢測(cè)可能會(huì)發(fā)生的改變,但不真正執(zhí)行操作
ansible-playbook playbook :直接執(zhí)行
ansible-playbook --list-hosts :列出運(yùn)行任務(wù)的主機(jī)
2、playbook介紹
設(shè)置在特定條件下觸發(fā):
a,某任務(wù)的狀態(tài)在運(yùn)行后為changed時(shí),可通過(guò)“notify”通知給相應(yīng)的handles;
handles:任務(wù)在特定條件下觸發(fā);接收到其他任務(wù)的通知是被觸發(fā);
b,任務(wù)可以通過(guò)“tags”打標(biāo)簽,而后可在ansible-playbook命令上使用-t指定進(jìn)行調(diào)用;
使用Ansible實(shí)現(xiàn)自動(dòng)化運(yùn)維的一些技巧
最近一年才有機(jī)會(huì)在生產(chǎn)環(huán)境上使用 Ansible。用的過(guò)程中,想把一些小技巧記錄下來(lái),避免自己忘記。如果能幫助到其他同學(xué)就更好了。如果有同學(xué)指出有更好的方法,就更更好了。
通常我們會(huì)使用 template module 來(lái)生成應(yīng)用的配置,比如生成 Nginx 的配置或者 sudoers 配置。而像 sudoers 文件內(nèi)的配置錯(cuò)誤可能直接導(dǎo)致無(wú)法登錄。所以,我們希望在生成這些配置文件后能校驗(yàn)一下它的正確性。如果校驗(yàn)失敗,直接停止,不生成該配置文件。
而 template module 有一個(gè)屬性 validate 就是為了實(shí)現(xiàn)這一需求的:
校驗(yàn) Nginx 配置文件的文件:
校驗(yàn) Prometheus 配置文件:
校驗(yàn) Logstash 配置文件:
在部署 Zookeeper 時(shí),通常會(huì)部署 3 臺(tái)組成集群,同時(shí)每臺(tái) Zookeeper 都需要在配置一個(gè) myid 的文本文件,而這個(gè)文件中只放id。而 id 是要求每臺(tái)機(jī)器都是不同的。這時(shí) host 變量派上用場(chǎng)了。定義 host 變量有兩種方式:
這種方式筆者認(rèn)為可維護(hù)性更高
不推薦兩種方式都使用,因?yàn)樽兞康淖饔糜騿?wèn)題會(huì)把你搞暈
某個(gè) shell 需要一個(gè)臨時(shí)變量,可以使用 environment 實(shí)現(xiàn)
以下方式會(huì)生成: a,a,a,a, 注意最后的逗號(hào)我們是不需要的:
這時(shí),我們可以這樣:
機(jī)器標(biāo)準(zhǔn)化要求每臺(tái)機(jī)器的ssh連接方式及管理員用戶名及密碼都是一樣的。但是事實(shí)中,面對(duì)老機(jī)器,常常做不過(guò)。所以,我們的 Ansible 腳本必須能做到不同的機(jī)器可以使用不同的連接方式、管理員用戶名和密碼。利用 host 變量就可以實(shí)現(xiàn)了。
舉個(gè)例子,當(dāng)前的文件內(nèi)容如下:
常識(shí)和技巧之間的界限很模糊。總之,希望對(duì)讀者有幫助。
使用ansible一鍵部署MongoDB分片集群
Mongodb 部署信息 :
os: centos7.7 x64 配置好NTP,防火墻默認(rèn)不做任何限制.
mongos部署兩個(gè)點(diǎn),config3個(gè)點(diǎn),和3個(gè)分片集群(每個(gè)分片一主一副一仲裁)
注意:因?yàn)榕袛噙壿嫷膯?wèn)題,不要在任何節(jié)點(diǎn)同時(shí)運(yùn)行兩種服務(wù)的主點(diǎn)
ansible的hosts文件配置:
環(huán)境變量全部都在這里設(shè)置,需要都寫(xiě)入到ansible的hosts文件里
變量中
server_1_ip 都設(shè)置為主點(diǎn)
server_2_ip 都設(shè)置為副點(diǎn)
server_3_ip 都設(shè)置為仲裁節(jié)點(diǎn)(config server沒(méi)有仲裁節(jié)點(diǎn),但是也要寫(xiě),不然mongos的配置文件模板會(huì)報(bào)錯(cuò))
這些IP的配置后面在初始化時(shí)會(huì)用到.
ansible文件夾結(jié)構(gòu) :
首先是模板文件:
mongod.conf.mongos.j2 mongos的配置文件模板
mongod.conf.normal.j2 shard server和config server的配置文件模板
mongod.service.j2 service文件模板
mongo.key 直接手動(dòng)生成 ,用戶MongoDB集群之間的加密連接,記得權(quán)限改為600
passwd.j2 用于配置MongoDB的root用戶名密碼
執(zhí)行:
按提示輸入服務(wù)器密碼
包含了系統(tǒng)優(yōu)化相關(guān)設(shè)置,注意中間會(huì)重啟一次讓一些系統(tǒng)優(yōu)化項(xiàng)生效
注意:因?yàn)榕袛噙壿嫷膯?wèn)題,不要在任何節(jié)點(diǎn)同時(shí)運(yùn)行兩種服務(wù)的主點(diǎn)
執(zhí)行 :
如果執(zhí)行有問(wèn)題建議多檢查變量配置
全部完成后可以驗(yàn)證一下集群環(huán)境:
登陸分片集群 :
分片的狀態(tài)顯示正常
登陸mongos
可以看到mongos的狀態(tài)也正常,分片也全部都添加進(jìn)去. 全部安裝至此完成.
一鍵刪除MongoDB安裝及相關(guān)數(shù)據(jù),方便重裝...
一鍵啟動(dòng)整個(gè)MongoDB集群
一鍵停止所有MongoDB集群
以上就是ansible在MongoDB的一鍵部署腳本,而且附帶了對(duì)服務(wù)器的優(yōu)化相關(guān)配置
ansible模板等使用方法
==============================================================
ansible 主機(jī)信息(可以是組) -m 模塊名稱 -a "完成動(dòng)作"
舉例:
在ansible中 使用ansible-doc 模塊名稱 來(lái)查看單獨(dú)模塊用法
常用參數(shù)
官方模塊說(shuō)明:
參數(shù):chdir--在執(zhí)行命令操作前進(jìn)行切換目錄
參數(shù):creates--判斷一個(gè)文件是否存在,如果存在后面的命令就不會(huì)執(zhí)行
參數(shù):removes--判斷一個(gè)文件是否存在,如果不存在,后續(xù)的命令不會(huì)被執(zhí)行
官方模塊說(shuō)明:
參數(shù)chdir:在執(zhí)行命令前進(jìn)行目錄切換
參數(shù):creates----判斷一個(gè)文件是否存在,如果存在,后續(xù)命令不會(huì)執(zhí)行
參數(shù):removes--判斷一個(gè)文件是否存在,如果不存在則候命的命令不會(huì)執(zhí)行
官網(wǎng)模塊說(shuō)明:
使用這個(gè)模塊需要注意的
官方模塊說(shuō)明:
參數(shù):name--指定安裝軟件的名稱
參數(shù):state--指定軟件安裝或卸載
在這個(gè)模塊中卸載使用 removed 安裝使用installed;注意看示例
官網(wǎng)模塊說(shuō)明:
官網(wǎng)模塊說(shuō)明:
參數(shù):src--指定管理端源數(shù)據(jù)
參數(shù):dest--分發(fā)到遠(yuǎn)程主機(jī)的目標(biāo)路徑下
參數(shù):owner--專屬文件之后修改文件屬主
參數(shù):group--傳輸文件之后修改文件屬組
參數(shù):mode--修改文件的讀、寫(xiě)、執(zhí)行權(quán)限
參數(shù):backup--在分發(fā)傳輸文件之前,將源文件進(jìn)行備份,按照時(shí)間信息進(jìn)行備份
參數(shù)remote_src--no表示從管理端找尋數(shù)據(jù)進(jìn)行分發(fā);yes 默認(rèn)從被管理端找尋數(shù)據(jù)進(jìn)行分發(fā)
參數(shù)content--分發(fā)文件時(shí)在文件中穿件簡(jiǎn)單信息
官網(wǎng)模塊說(shuō)明:
參數(shù):src--要拉取的遠(yuǎn)程數(shù)據(jù)
參數(shù):dest--要保存本地的文件路徑
官方說(shuō)明:
path:指定路徑信息
owner:傳輸文件之后修改文件屬主權(quán)限
group:傳輸文件后修改屬組權(quán)限
mode:直接修改文件讀、寫(xiě)、執(zhí)行權(quán)限
state:touch(創(chuàng)建文件)、directory(創(chuàng)建目錄)、hard(創(chuàng)建硬鏈接文件) link(創(chuàng)建軟鏈接文件)、absent(刪除數(shù)據(jù))
創(chuàng)建件目錄:
創(chuàng)建文件:
刪除數(shù)據(jù)信息:
官方說(shuō)明:
參數(shù):src--指定要掛載數(shù)據(jù)
參數(shù):path--指定掛載點(diǎn)
**參數(shù):fstype--指定掛載后,文件系統(tǒng)類型 如:ext3、ext4、xfs、nfs **
參數(shù):state--指定動(dòng)作 如:mounted(掛載)、present(永久掛載)、umounted(臨時(shí)卸載) absent(永久卸載)
掛載:
官方說(shuō)明:
name: 定義定時(shí)任務(wù)注釋信息
參數(shù):minute --表示分鐘信息
參數(shù):hour --表示小時(shí)信息
參數(shù):day --表示日期信息
參數(shù):month --表示月份信息
參數(shù):weekday --表示星期信息
參數(shù):job --表示定義任務(wù)信息
參數(shù):state --指定動(dòng)作 如:present(創(chuàng)建定時(shí)任務(wù))、absent(刪除定時(shí)任務(wù))
參數(shù):disabled: 讓定時(shí)任務(wù)臨時(shí)失效
利用ansible編寫(xiě)時(shí)間同步定時(shí)任務(wù):每隔5分鐘,進(jìn)行時(shí)間同步:
刪除定時(shí)任務(wù):
注釋定時(shí)任務(wù):
官網(wǎng)說(shuō)明:
參數(shù):name--指點(diǎn)組名
參數(shù):gid--指定gid
參數(shù):state--指定動(dòng)作 present(創(chuàng)建) absent(刪除)
官方說(shuō)明:
參數(shù):name--指定用戶名稱
參數(shù):uid--指定用戶uid信息
參數(shù):group--指定屬組
參數(shù):groups--指定屬于附加組
參數(shù):password—-指定用戶密碼信息(必須密文的信息)
參數(shù):shell—-指定用戶shell信息 /sbin/nologin
參數(shù):create_home--no表示不創(chuàng)建家目錄
創(chuàng)建用戶:
刪除用戶:
**方法一:利用ansible模塊功能
ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"
mypassword: 指定明文密碼信息
mysecretsalt:加密計(jì)算方式(輔助加密)
方法二:利用python模塊功能
使用這種方法需要安裝python-pip
如果安裝不上需要更新pip源,更新方法:
更新pip源:
==============================================================
Linux
ansible批量修改服務(wù)器密碼的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于ansible sudo 需要密碼、ansible批量修改服務(wù)器密碼的信息別忘了在本站進(jìn)行查找喔。
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。