SSH服务补充以及ansible

主要内容:

1.非交互式SSH密钥认证(一键创建秘钥,一键发送秘钥)

2.批量创建、发送、验证秘钥认证

3.ansible使用指南

4.Ansible inventory 主机清单

5.ansible模块清单

一、非交互式SSH密钥认证

1.非交互式创建密钥

命令:ssh-keygen
参数:-P 指定密码短语
-f 指定私钥地址
-t 指定秘钥类型

[root@m01 ~]# ll .ssh/
total 0
[root@m01 ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
Generating public/private dsa key pair.
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:zCQ8DZKOadzwVoWbaLA00xe1bSziLlC3JbSG+QyJjB4 root@m01
The key's randomart image is:
+---[DSA 1024]----+
|   ...+=o        |
| o*.oB++ +       |
|.Eo%*+Xo* +      |
|. B.BBo@ o       |
| o.o  = S        |
|   . .           |
|    . .          |
|     .           |
|                 |
+----[SHA256]-----+
[root@m01 ~]# ll .ssh/
total 8
-rw------- 1 root root 668 May 28 19:06 id_dsa
-rw-r--r-- 1 root root 598 May 28 19:06 id_dsa.pub
2.非交互式发送公钥

命令:ssh-copy-id

[root@m01 ~]# sshpass -p123456  ssh-copy-id -i ~/.ssh/id_dsa.pub   172.16.1.41  -o   StrictHostKeyChecking=no
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_dsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -o 'StrictHostKeyChecking=no' '172.16.1.41'"
and check to make sure that only the key(s) you wanted were added.

[root@m01 ~]# ssh 172.16.1.41
Last login: Tue May 28 16:33:09 2019 from 172.16.1.61
[root@backup ~]# 

二、编写脚本批量创建、分发、测试密钥

1.脚本编写:
[root@m01 ~]# vim /server/scripts/fengfa-pub.sh 
#!/bin/bash
source /etc/init.d/functions
rm -f ~/.ssh/*
#make  key  pair
      echo "-----------------Start Secret Key --------------------"
             ssh-keygen -t  dsa  -f ~/.ssh/id_dsa  -P ''  &>/dev/null
      if (($?==1))

      then
             action "Secret key creation failed!"   /bin/false

      else
             action "Secret key creation success"   /bin/true
      fi
      echo "-----------------End  Secret Key --------------------"

      echo ""
#fenfa  public key
for   ip in `cat /server/scripts/ip.txt`

do
      echo "---------------Sent START to host $ip----------------"
      sshpass -p123456 ssh-copy-id  -i /root/.ssh/id_dsa.pub  $ip  -o  StrictHostKeyChecking=no  &>/dev/null


      if (($?==1))
                                                                                                          1,7           Top
#!/bin/bash
source /etc/init.d/functions
rm -f ~/.ssh/*
#make  key  pair
      echo "-----------------Start Secret Key --------------------"
             ssh-keygen -t  dsa  -f ~/.ssh/id_dsa  -P ''  &>/dev/null
      if (($?==1))

      then
             action "Secret key creation failed!"   /bin/false

      else
             action "Secret key creation success"   /bin/true
      fi
      echo "-----------------End  Secret Key --------------------"

      echo ""
#fenfa  public key
for   ip in `cat /server/scripts/ip.txt`

do
      echo "---------------Sent START to host $ip----------------"
      sshpass -p123456 ssh-copy-id  -i /root/.ssh/id_dsa.pub  $ip  -o  StrictHostKeyChecking=no  &>/dev/null


      if (($?==1))

      then
             action "host $ip Send failed!"   /bin/false
      else
             action "host $ip Send success"   /bin/true
      fi

      echo "----------------End START to host $ip----------------"

      echo ""
#Connect  check        

      echo "-----------------connect START host $ip--------------"
      echo "hostname:"   `ssh $ip  hostname`


      if (($?==1))

      then
             action "host $ip connect failed!"   /bin/false

      else
             action "host $ip connect success"   /bin/true
      fi

      echo "----------------Connect END host $ip-----------------"
      echo ""
      echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"     
done
2.执行脚本:
[root@m01 ~]# sh /server/scripts/fengfa-pub.sh
-----------------Start Secret Key --------------------
Secret key creation success                                [  OK  ]
-----------------End  Secret Key --------------------

---------------Sent START to host 172.16.1.7----------------
host 172.16.1.7 Send success                               [  OK  ]
----------------End START to host 172.16.1.7----------------

-----------------connect START host 172.16.1.7--------------
hostname: web01
host 172.16.1.7 connect success                            [  OK  ]
----------------Connect END host 172.16.1.7-----------------

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---------------Sent START to host 172.16.1.41----------------
host 172.16.1.41 Send success                              [  OK  ]
----------------End START to host 172.16.1.41----------------

-----------------connect START host 172.16.1.41--------------
hostname: backup
host 172.16.1.41 connect success                           [  OK  ]
----------------Connect END host 172.16.1.41-----------------

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---------------Sent START to host 172.16.1.31----------------
host 172.16.1.31 Send success                              [  OK  ]
----------------End START to host 172.16.1.31----------------

-----------------connect START host 172.16.1.31--------------
hostname: nfs01
host 172.16.1.31 connect success                           [  OK  ]
----------------Connect END host 172.16.1.31-----------------

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

三、ansible使用指南:

1.前提:在管理机上配置好密钥认证并分发
2.ansible文件:

/etc/ansible
/etc/ansible/ansible.cfg:配置文件
/etc/ansible/hosts:主机清单(被管理的服务器列表)
/etc/ansible/roles

3.ansible命令及参数

参数:
-m 指定模块
-a 模块中的命令或参数

4.命令的书写方式(你要用的主机必须是在/etc/ansible/hosts中配置的,即必须配置这个文件)

(1)ansible oldboy -m command -a 'hostname':这个oldboy组中的

[root@m01 ~]# ansible oldboy -m command -a 'hostname'
172.16.1.41 | CHANGED | rc=0 >>
backup

172.16.1.31 | CHANGED | rc=0 >>
nfs01

172.16.1.7 | CHANGED | rc=0 >>
web01

(2)ansible oldboy -a 'hostname':默认为command模块 可以不加

[root@m01 ~]# ansible oldboy  -a 'hostname'
172.16.1.7 | CHANGED | rc=0 >>
web01

172.16.1.31 | CHANGED | rc=0 >>
nfs01

172.16.1.41 | CHANGED | rc=0 >>
backup

(4)ansible 172.16.1.41 -a 'hostname':单个主机执行

[root@m01 ~]# ansible 172.16.1.41  -a 'hostname'
172.16.1.41 | CHANGED | rc=0 >>
backup

(5)ansible all -a 'hostname':所有/etc/ansible/hosts 中的主机执行

[root@m01 ~]# ansible all  -a 'hostname'
172.16.1.41 | CHANGED | rc=0 >>
backup

172.16.1.7 | CHANGED | rc=0 >>
web01

172.16.1.31 | CHANGED | rc=0 >>
nfs01
5.颜色

(1)绿色:成功 对方服务器没有发送修改
(2)黄色:成功 修改内容(修改成功)
(3)红色:报错
(4)紫色:warning 警告

四、Ansible inventory 主机清单

里面存放着要可以批量管理的主机列表

[root@m01 ~]# tail -5 /etc/ansible/hosts 
## db-[99:101]-node.example.com
[oldboy]
172.16.1.7
172.16.1.41
172.16.1.31

五、ansible模块清单(ad-hoc模式常用的模块)

1.command:命令模块

默认模块,用于执行命令,不支持特殊符号

[root@m01 ~]# ansible 172.16.1.41  -a 'hostname -I'
172.16.1.41 | CHANGED | rc=0 >>
10.0.0.41 172.16.1.41 

[root@m01 ~]# ansible 172.16.1.41  -a 'hostname -I |awk '{peint $NF}''
ERROR! Extraneous options or arguments
2.shell模块:如果需要管道等操作可以使用shell
[root@m01 ~]# ansible 172.16.1.41  -m shell -a "ifconfig|grep eth0"  -f 50
172.16.1.41 | CHANGED | rc=0 >>
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
3.copy 复制模块:将批量管理服务器的东西推送到其他服务器上

src= 源(文件从哪里来)
dest= 远端(文件到哪里去)
owner= 所有者
group= 所属组
backup=(yes/no) 是否备份
mode=权限
content=""

将引号中的内容追加到文件中
与src冲突 不能一起使用
先清空 再追加

[root@m01 ~]# ansible 172.16.1.41  -m copy -a 'src=/etc/hostname   dest=/tmp/'
172.16.1.41 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "f434396716e2c9aed47cfde87c491cce5a2c08fa", 
    "dest": "/tmp/hostname", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "318d7defb693a2eb0d4f1a7a96575a57", 
    "mode": "0644", 
    "owner": "root", 
    "size": 4, 
    "src": "/root/.ansible/tmp/ansible-tmp-1559047657.14-59898274981816/source", 
    "state": "file", 
    "uid": 0
}
[root@m01 ~]# ansible 172.16.1.41   -a 'cat /tmp/hostname'
172.16.1.41 | CHANGED | rc=0 >>
m01
4.script:脚本模块(先把脚本传输到远端,在执行脚本)
1.创建脚本文件
[root@m01 ~]# vim script.sh
#!/bin/bash
yum install -y cowsay

2.利用ansible批量安装
[root@m01 ~]# ansible all -m script  -a  '/root/script.sh'
3.查看是否安装成功
[root@m01 ~]# ansible all  -a  'animalsay check'
172.16.1.41 | CHANGED | rc=0 >>
 _______
< check >
 -------
    \
     \
      \
  ___       _____     ___
 /   \     /    /|   /   \
|     |   /    / |  |     |
|     |  /____/  |  |     |     
|     |  |    |  |  |     |
|     |  | {} | /   |     |
|     |  |____|/    |     |
|     |    |==|     |     |
|      \___________/      |
|                         |
|                         |

5.yum :安装软件模块

name 指定要安装的软件包名称
state 指定使用yum的方法

installed,present 安装软件包 默认
removed,absent 移除软件包
latest 更新软件包

[root@m01 ~]# ansible all -m yum  -a 'name=cowsay  state=present'
172.16.1.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "cowsay-3.04-4.el7.noarch providing cowsay is already installed"
    ]
}
172.16.1.31 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "cowsay-3.04-4.el7.noarch providing cowsay is already installed"
    ]
}
172.16.1.41 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "cowsay-3.04-4.el7.noarch providing cowsay is already installed"
    ]
}

由于cowsay已经安装所以没有显示完成

6.file 文件配置模块:相当于 touch mkdir ln rm

path:指定远程主机的目录或文件信息
state

directory:在远端创建目录
touch:在远端创建文件
link:软连接
absent:删除文件或目录

[root@m01 ~]# ansible 172.16.1.41  -m file  -a 'path=/tmp/a/b/c  state=directory'
172.16.1.41 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 0, 
    "group": "root", 
    "mode": "0755", 
    "owner": "root", 
    "path": "/tmp/a/b/c", 
    "size": 6, 
    "state": "directory", 
    "uid": 0
}
[root@m01 ~]# ansible 172.16.1.41 -m file  -a 'path=/tmp/a/b/c/ylz.txt  state=touch'
172.16.1.41 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/tmp/a/b/c/ylz.txt", 
    "gid": 0, 
    "group": "root", 
    "mode": "0644", 
    "owner": "root", 
    "size": 0, 
    "state": "file", 
    "uid": 0
}
[root@m01 ~]# ansible 172.16.1.41   -a 'tree /tmp/a'
172.16.1.41 | CHANGED | rc=0 >>
/tmp/a
└── b
    └── c
        └── ylz.txt

2 directories, 1 file
7.service 服务模块

name:定义要启动服务的名称
state

started
启动服务
stoped
停止服务
restarted
重启服务
reloaded
平滑重启服务
enabled:开机自启(yes/no)

8.user 模块

name:用户名
uid:指定用户的uid
group:指定用户组名称
groups:添加用户附属组
password:给用户添加密码
shell:指定用户的登录shell
create_home:是否创建家目录

[root@m01 ~]# ansible 172.16.1.41  -m group -a 'name=oldgirl  gid=1111   state=present'
172.16.1.41 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 1111, 
    "name": "oldgirl", 
    "state": "present", 
    "system": false
}
[root@m01 ~]# ansible 172.16.1.41  -m user -a  'name=oldgirl uid=1111  group=oldgirl  shell=/sbin/nologin  create_home=no'
172.16.1.41 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": false, 
    "group": 1111, 
    "home": "/home/oldgirl", 
    "name": "oldgirl", 
    "shell": "/sbin/nologin", 
    "state": "present", 
    "system": false, 
    "uid": 1111
}
[root@m01 ~]# ansible 172.16.1.41 -a 'grep oldgirl /etc/passwd'
172.16.1.41 | CHANGED | rc=0 >>
oldgirl:x:1111:1111::/home/oldgirl:/sbin/nologin

[root@m01 ~]# 
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • 运维核心工作: 操作系统安装(物理机、虚拟机)--> 应用程序包部署(安装、配置、服务启动 )--> 批量操作 -...
    Net夜风阅读 1,474评论 0 4
  • 1.ssh-keygen非交互式创建秘钥对: 具体命令:ssh-keygen -f ~/.ssh/id_rsa ...
    1220阅读 966评论 0 0
  • Ansible Ansible version : 2.6.2 ad-hoc命令简介 什么是ad-hoc命令? a...
    洛神鬼道阅读 2,917评论 0 1
  • “呜呜呜…” “呜呜呜…” 午夜12点过后,隔壁的哭声按时响起,哭声阴冷、诡异,让人听得心里发毛。小宋遮住耳朵也不...
    雪拈忆阅读 598评论 1 2
  • 在朋友的再三劝说下,我终于和老实人分手了。 “说要爱的是你,说爱的无趣的人还是你,你的爱很随便”老实人用深...
    耳鱼人阅读 247评论 0 0