一、須要利用7.5版本虛擬機
二、7.5版注意事項:python
【2.1】、網卡名叫ens32一樣配置文件也是ens32 【2.2】、命令:systemctl 統一管理命令, 例,systemctl stop iptables.service 關閉防火牆 【2.3】、設置開機自啓動防火牆:systemctl enable firewalld 【2.4】、設置開機關閉防火牆(必須關閉) :systemctl disable firewalld 【2.5】、必 須 關 閉 :systemctl disable NetworkManager 【2.6】、yum得配置文件所有能夠用 【2.7】、重啓虛擬機,ifup ens32 啓動網卡來獲取ip
生產環境Ansible管理服務器ssh登錄安全策略
一、ansible (很是簡單,不少企業都在用) 適用於管理500臺如下的服務器,特色是一臺虛擬機管理多臺虛擬機,不須要安裝任何客戶端。利用得是ssh通道,操控要用免密鑰。nginx
1.一、安裝ansible軟件同時會自動安裝sshpass yum -y install epel-release yum -y install ansible 1.二、修改ssh登陸 1.2.一、vim /etc/ssh/ssh_config 修改第35行 StrictHostKeyChecking ask改成no 1.2.二、vim /etc/ssh/sshd_config 第17行 #Port 22 #修改ssh鏈接端口 (工做中改爲一萬以上) 第38行 #PermitRootLogin yes #是否容許root帳號遠程登錄 (工做中必須關閉) 第43行 #PubkeyAuthentication yes #是否開啓公鑰鏈接認證 (工做中開啓) 第47行 AuthorizedKeysFile .ssh/authorized_keys #公鑰文件的放置位置 第65行 PasswordAuthentication yes #是否開啓密碼驗證登錄 第79行 GSSAPIAuthentication yes #是否關閉GSSAPI認證 (工做中關閉)提升ssh解析速度 第115行 #UseDNS yes #是否關閉DNS反向解析 (關閉) 加快ssh得鏈接速度 1.2.三、ansible配置文件 /etc/ansible/hosts /etc/ansible/hosts vim /etc/ansible/hosts [nginx] WebA ansible_ssh_host=IP地址 WebB ansible_ssh-host=IP地址
[root@ansible ~]# cat /etc/ansible/hosts [nginx] Web01 ansible_ssh_host=192.168.200.184 Web02 ansible_ssh_host=192.168.200.185
說明: ansible_ssh_host:
被管理主機IP ansible_ssh_user:
被管理主機用戶名 ansible_ssh_pass:
被管理主機用戶的登錄密碼 ansible_sudo_pass:
被管理主機用戶sudo時的密碼web
爲了不Ansible下發指令時須要輸入被管理主機的密碼,能夠經過證書籤名達到SSH無密碼登錄。使用ssh-keygen產生一對密鑰,並經過ssh-copy-id命令來發送生成的公鑰。shell
[root@ansible ~]# ls ~/.ssh/ authorized_keys id_rsa id_rsa.pub [root@ansible ~]# ssh-copy-id 192.168.200.184 [root@ansible ~]# ssh-copy-id 192.168.200.185
[root@ansible ~]# /usr/local/python/bin/ansible-doc -l
查看總幫助 [root@ansible ~]# /usr/local/python/bin/ansible-doc -s shell
查看shell模塊的幫助apache
一、ping模塊:Ansible中使用ping模塊來檢測指定主機的連通性vim
【1】、Ansible中使用ping模塊來檢測指定主機的連通性 ansible Web01 -m ping 綠色表示連通的,紅色表示不通 只要作了免密鑰就能夠直接登陸用戶。ansible 被管理範圍 -m 模塊名 -a 具體命令 【2】、saltstack (複雜)適用於管理1000-40000臺服務器 【3】、puppet(超級複雜)
二、command模塊:在遠程主機執行命令,不支持管道符和重定向等複雜命令,可徹底被shell模塊替代安全
例:ansible Web01 -m command -a 'hostname -I' 查看Web01服務器的ip地址
三、shell模塊:Ansible中的shell模塊能夠在被管理主機上運行命令,並支持像管道符重定向這樣的複雜命令。bash
例1:ansible Web01 -m shell -a 'useradd yunjisuan' 在Web01上建立用戶yunjisuan 例2:ansible Web01 -m shell -a 'echo 123123 | passwd --stdin yunjisuan' 給Web01上yunjisuan用戶非交互方式設定密碼
四、cron模塊:Ansible中的cron模塊用於定義任務計劃。主要包括兩種狀態(state);服務器
【4.1】crontab時間週期: 若是不指定週期,默認是*號 minute:分鐘 hour:小時 day:日期 month:月份 weekday:週期 【4.2】crontab任務: job:指明運行的命令是什麼 【4.3】crontab任務描述: 必須寫 name:定時任務描述(定時任務清除的依據) 【4.4】state狀態: 添加或刪除定時任務,不寫默認是添加 present:表示添加(省略狀態時默認使用); absent:表示移除; 【4.5】crontab任務的用戶身份: user:指定定時任務以哪一個用戶身份執行,若是不指定默認是root用戶 例一、添加定時任務計劃,在全部被管理的主機裏每十分鐘輸出hello字符串,定時任務描述爲test cron job ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"' 例二、刪除描述爲test cron job的定時任務 ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state=absent' 例三、給Web01服務器上的普通用戶yunjisuan添加一個定時任務 ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" user="yunjisuan"'
五、copy模塊:Ansible中的copy模塊用於實現文件複製和批量下發文件。其中使用src來定義本地源文件路徑;使用dest定義被管理主機文件路徑;backup=yes表示備份如下對方的文件。使用content則是使用指定信息內容來生成目標文件。ssh
例一、把WebB服務器上的/tmp/test目錄複製到/root/下 ansible WebB -m copy -a ‘src=/tmp/test dest=/root’ 例二、把WebB服務器上的/tmp/test目錄備份一下在複製到/root/下 ansible WebB -m copy -a ‘src=/tmp/test dest=/root backup=yes’
六、script模塊:Ansible中的script模塊能夠將本地腳本複製到被管理主機的內存中並運行,不會在被管理主機中留下腳本文件。
例一、編寫一個腳本,而後經過ansible的script模塊遠程向被管理主機執行此腳本 echo 'echo "1111" >> /tmp/test' >> /tmp/test.sh ansible WebA -m script -a '/tmp/test.sh'
七、 yum模塊:利用yum模塊安裝軟件包,雖然能被shell模塊替代
可是用yum模塊更顯專業一些
【7.1】軟件包名: name:指定軟件包的名字 state狀態: present:安裝軟件包(默認就是這個) absent:卸載軟件包 例一、安裝nmap軟件包 ansible all -m yum -a 'name=nmap' 例二、卸載nmap軟件包 ansible all -m yum -a 'name=nmap state=absent'
八、service模塊:利用service模塊管理服務程序,雖然能被shell模塊替代
可是用service模塊更顯專業一些
【8.1】服務名稱: name:指定服務的名字 【8.2】state狀態: started:啓動服務 stopped:中止服務 restarted:重啓服務 reloaded:平滑重載 【8.3】enabled開機自啓動: true:設置開機自啓動 false:設置開啓不啓動 例一、啓動firewalld並設置開機自啓動 ansible Web01 -m service -a 'name=firewalld state=started enabled=true' 例二、關閉firewalld並設置開機不啓動 ansible Web01 -m service -a 'name=firewalld state=stopped enabled=false'
九、user模塊:用戶管理模塊。管理用戶帳號,批量建立用戶
【9.1】指定用戶名 name:指定操做的用戶的名字 【9.2】用戶描述 comment:指定用戶的描述信息 【9.3】createhome:是否建立家目錄 【9.4】uid:指定用戶的uid號 【9.5】groups:指定用戶的附加組(默認建立和用戶名相同的組) 【9.6】password:指定用戶的密碼 【9.7】update_password:更新用戶的密碼 【9.8】shell指定用戶的登錄方式 /bin/bash:能登陸系統 /sbin/nologin:不能登陸系統 【9.9】home:指定用戶的家目錄路徑 【9.10】state狀態: present:建立用戶(默認就是這個) absent:刪除用戶 【9.11】remove:當指定state=absent時,確認是否刪除用戶家目錄 true false 例一、在Web02上建立一個普通用戶yunjisuan,並設置用戶的密碼爲123123 ansible Web02 -m user -a 'name=yunjisuan comment="welcom to yunjisuan" uid=1066 password=123123 shell=/bin/bash home=/home/yunjisuan' 注:利用ansible的user模塊狀態用戶時要注意在password參數的後邊添加密文,不然不能登錄用戶 經過Python的pip程序安裝passlib便可爲密碼加密 例二、安裝Python2的pip工具,並經過pip工具安裝Python的加密模塊來給密碼加密 yum -y install epel-release yum -y install python2-pip pip install passlib (python裝一個支持程序passlib) 生成密文密碼 python -c "from passlib.hash import sha512_crypt;import getpass;print sha512_crypt.encrypt(getpass.getpass())" Password: #輸入你想要加密的密碼 $6$rounds=656000$Tw15COd8DLh/VS94$Mcmz/8CcjBKiEl0mYHcOQQCxEA5mz66EcGH2qXVk6o.Sm7FsRS.DsDVy6ET8iI6jDa045I94slZqWFwyYnRSW1 #加密後的密碼 把加密的暗文複製到剛纔password=暗文 例二、刪除以前建立的yunjisuan用戶,並刪除它的家目錄 ansible Web02 -m user -a 'name=yunjisuan state=absent remove=true'
十、setup模塊:Ansible中使用setup模塊收集,查看被管理主機的facts(facts是Ansible採集被管理主機設備信息的一個功能)。每一個被管理主機在接收並運行管理命令以前,都會將本身的相關信息(操做系統版本,IP地址等)發送給控制主機
例一、查看全部遠程主機的facts信息 ansible all -m setup | head (all表示全部)