SSH远程管理服务

1. 远程管理服务知识介绍

  1. # 1.1 SSH远程登录服务介绍说明
  2. SSHSecure Shell Protocol的简写,由 IETF 网络工作小组(Network Working Group)制定;
  3. 在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。
  4. SSH是专为远程登录会话和其他网络服务提供的安全性协议。
  5. 利用SSH协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境运维工作中,
  6. 绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件,如telnet(23端口,非加密的)等。
  7.  
  8. 在默认状态下,SSH服务主要提供两个服务功能:
  9. a 一是提供类似telnet远程联机服务器的服务,即上面提到的SSH服务;
  10. b 另一个是类似FTP服务的sftp-server,借助SSH协议来传输数据的,提供更安全的SFTP服务(vsftp,proftp)。
  11.  
  12. # 1.2 SSH远程登录服务排错思路
  13. 01. 检查链路是否通畅---ping(icmp协议)/tracert/traceroute
  14. 02. 检查链路是否阻断---将防火墙功能关闭
  15. 03. 检查服务是否开启---ss/netstat -lntup(服务端检查) /telnet/nmap/nc(客户端检查)
  16.  
  17. # 远程管理服务对比说明:
  18. # 安装 telnet 客户端软件: yum install -y telnet
  19. # 安装 telnet 服务端软件(备份服务器): yum install -y telnet-server
  20.  
  21. [root@backup ~]# yum install -y telnet-server telnet
  22. ...
  23. [root@backup ~]# cat /etc/xinetd.d/telnet
  24. # default: on
  25. # description: The telnet server serves telnet sessions; it uses \
  26. # unencrypted username/password pairs for authentication.
  27. service telnet
  28. {
  29. flags = REUSE
  30. socket_type = stream
  31. wait = no
  32. user = root
  33. server = /usr/sbin/in.telnetd
  34. log_on_failure += USERID
  35. disable = no # 把 disable 由默认的 yes 改成 no ,表示 telnet 能由 xinetd 服务
  36. }
  37.  
  38. [root@backup ~]# /etc/init.d/xinetd restart # 重启 xinetd 服务
  39. Stopping xinetd: [ OK ]
  40. Starting xinetd: [ OK ]
  41. [root@backup ~]#
  42. # 此时就把 telnet 服务启动了
  43.  
  44. Type `help' to learn how to use Xshell prompt.
  45. Xshell:\> telnet 10.0.0.41 # 用 telnet 连接远程服务器 (telnet 不能用 root 用户连接;使用 telnet ip 之前要先把 xinetd服务开启)
  46.  
  47. Type `help' to learn how to use Xshell prompt.
  48. Xshell:\> ssh 10.0.0.41 # ssh 连接远程服务器 既可用 root 用户,也可用 普通用户

2. 远程管理服务概念详解

  1. 2.1 SSH远程管理服务加密技术
  2. ssh连接登录过程:
  3. ①. ssh客户端发(m01主机)出连接请求
  4. ②. ssh服务端会发出确认信息,询问客户端你是否真的要连接我
  5. ③. ssh客户端输入完成yes,会等到一个公钥信息
  6.  
  7. [root@m01 /]# cat /root/.ssh/known_hosts
  8. 10.0.0.41 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxk0wkLuvRML5GrK8p+EU6yLAvLf5aOsnu2ydGzvn8mXuE4EdhGzGC1h9cwvMYwY7xD47aBRP/q+13T6Jh8/A580m6AaZmagS/OawtcVaseTMJEehysIqPBOD9xqPGOWK5c3vWFcW0yC1rp64axYAbrXgOEX8TddxF4rPAyinOpqMPe1ncF6hY8Zq3VxCDKIFJk//RPpO1eqM8eXLl7P1tLCLYHVvRWdjDQ2k275cPOAXiLr2Wc+KuzQUMAeLV0e/41DtMHHdI8bkrMfMMFXFPR04nZv+uv4DvX7Md/5NoGB6PkH9ozvDyqLFS7Z2m0hpomhqkaM5OtbN6rm+YrJXqQ==
  9. [root@m01 /]#
  10.  
  11. ④. ssh服务端(如:备份服务器)将公钥信息发送给ssh客户端
  12.  
  13. [root@backup ~]# cd /etc/ssh # 公钥、密钥存放路径
  14. [root@backup ssh]# ll
  15. total 160
  16. -rw-------. 1 root root 125811 Mar 22 2017 moduli
  17. -rw-r--r--. 1 root root 2047 Mar 22 2017 ssh_config
  18. -rw------- 1 root root 3876 Apr 30 18:43 sshd_config
  19. -rw-------. 1 root root 3879 Mar 22 2017 sshd_config.bak
  20. -rw-------. 1 root root 668 Oct 16 2018 ssh_host_dsa_key
  21. -rw-r--r--. 1 root root 590 Oct 16 2018 ssh_host_dsa_key.pub
  22. -rw-------. 1 root root 963 Oct 16 2018 ssh_host_key
  23. -rw-r--r--. 1 root root 627 Oct 16 2018 ssh_host_key.pub
  24. -rw-------. 1 root root 1675 Oct 16 2018 ssh_host_rsa_key
  25. -rw-r--r--. 1 root root 382 Oct 16 2018 ssh_host_rsa_key.pub
  26. [root@backup ssh]# cat ssh_host_rsa_key.pub
  27. ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxk0wkLuvRML5GrK8p+EU6yLAvLf5aOsnu2ydGzvn8mXuE4EdhGzGC1h9cwvMYwY7xD47aBRP/q+13T6Jh8/A580m6AaZmagS/OawtcVaseTMJEehysIqPBOD9xqPGOWK5c3vWFcW0yC1rp64axYAbrXgOEX8TddxF4rPAyinOpqMPe1ncF6hY8Zq3VxCDKIFJk//RPpO1eqM8eXLl7P1tLCLYHVvRWdjDQ2k275cPOAXiLr2Wc+KuzQUMAeLV0e/41DtMHHdI8bkrMfMMFXFPR04nZv+uv4DvX7Md/5NoGB6PkH9ozvDyqLFS7Z2m0hpomhqkaM5OtbN6rm+YrJXqQ==
  28. [root@backup ssh]#
  29.  
  30. ⑤. ssh客户端利用密码进行登录
  31.  
  32. 加密技术分为v1v2两个版本
  33. sshv1版本不会经常更换锁头和钥匙,因此会有安全隐患
  34. sshv2版本会经常更换锁头和钥匙,因此提高了远程连接安全性

3. SSH远程管理服务认证类型

  1. # 基于密钥方式实现远程登录
  2. ①. ssh管理服务器(m01主机)上创建密钥对信息(公钥 私钥)
  3. ②. ssh管理服务器上将公钥发送给被管理服务器(如 备份服务器)
  4. ③. ssh管理服务器向被管理服务器发送连接请求
  5. ④. ssh被管理服务器向管理服务器发送公钥质询
  6. ⑤. ssh管理服务器处理公钥质询请求,将公钥质询结果发送给被管理主机
  7. ⑥. ssh被管理服务器接收公钥质询响应信息,从而确认认证成功
  8. ⑦. ssh管理服务端可以和被管理服务端建立基于密钥连接登录

4. 基于密钥登录方式部署流程

  1. # 第一个里程:在管理主机(如 m01主机)上创建密钥对信息
  2. [root@m01 ~]# ssh-keygen -t dsa <-- 创建密钥对命令 -t dsa表示指定密钥对加密类型
  3. Generating public/private dsa key pair.
  4. Enter file in which to save the key (/root/.ssh/id_dsa): <-- 确认私钥文件所保存的路径
  5. /root/.ssh/id_dsa already exists.
  6. Overwrite (y/n)? y <-- 如果已经存在了密钥对信息,是否进行覆盖
  7. Enter passphrase (empty for no passphrase): <-- 确认是否给私钥设置密码信息(一般为空)
  8. Enter same passphrase again:
  9. Your identification has been saved in /root/.ssh/id_dsa.
  10. Your public key has been saved in /root/.ssh/id_dsa.pub.
  11. The key fingerprint is:
  12. 46:c8:21:b9:99:6e:0c:59:39:66:38:7a:97:29:51:76 root@m01
  13. The key's randomart image is:
  14. +--[ DSA 1024]----+
  15. | o+oE |
  16. | +.B+ o |
  17. | . B Bo . |
  18. |. = B . |
  19. | . * S |
  20. | + . |
  21. | . |
  22. | |
  23. | |
  24. +-----------------+
  25.  
  26. # 第二个里程:将管理主机上公钥信息发送给被管理主机
  27. [root@m01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31 # 将管理主机上的 公钥 发送给 被管理主机上;如果管理主机想用内网连接被管理主机,则 ip 要写成内网ip,反之则用 外网ip;此时是用root身份分发公钥,所以也只能用root身份进行管理;如果想让普通用户如 oldboy 进行管理,在ip前加上 普通用户名
  28. The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
  29. RSA key fingerprint is 22:07:4d:36:3c:5e:eb:46:80:a2:ef:40:45:8c:93:46.
  30. Are you sure you want to continue connecting (yes/no)? yes
  31. Warning: Permanently added '172.16.1.31' (RSA) to the list of known hosts.
  32. root@172.16.1.31's password:
  33. Now try logging into the machine, with "ssh '172.16.1.31'", and check in:
  34.  
  35. .ssh/authorized_keys # 公钥文件保存在了 172.16.1.31 主机 root 用户家目录下的 .ssh/ 目录下
  36.  
  37. to make sure we haven't added extra keys that you weren't expecting.
  38.  
  39. [root@m01 ~]#
  40.  
  41. # 公钥文件保存在了 172.16.1.31 主机 root 用户家目录下的 .ssh/ 目录下
  42. [root@nfs01 ~]# cd /root/.ssh/
  43. [root@nfs01 .ssh]# ll
  44. total 4
  45. -rw------- 1 root root 598 May 24 14:17 authorized_keys
  46. [root@nfs01 .ssh]#
  47.  
  48. # 第三个里程:进行远程管理测试(基于密钥的方式进行远程管理)
  49. [root@m01 ~]# ssh 172.16.1.31 # 不需要密码直接登陆被管理主机
  50. Last login: Fri May 24 14:15:34 2019 from 10.0.0.253
  51. [root@nfs01 ~]#
  52.  
  53. [root@m01 ~]# ssh 172.16.1.31 uptime # 不登陆被管理主机 查看被管理主机的状况
  54. 14:31:30 up 26 min, 1 user, load average: 0.00, 0.00, 0.00
  55. [root@m01 ~]#

5.  SSH配置文件

  1. # SSH服务端配置文件: /etc/ssh/sshd_config
  2. # SSH客户端配置文件: /etc/ssh/ssh_config
  3.  
  4. # SSH服务端配置文件信息说明(/etc/ssh/sshd_config)
  5. Port 52113 <- 修改ssh服务端口号信息 (端口号要在1024之后);修改端口号的连接方式: ssh -p端口号 ip
  6. ListenAddress 0.0.0.0 <- 指定哪个地址建立网络连接:0.0.0.0 表示全部网卡都处于被监听状态,即都可做出响应;172.16..31 表示只有该网卡(内网网卡)处于被监听状态;主要作用提升网络连接安全性
  7. PS:监听地址只能配置为服务器网卡上拥有的地址
  8. PermitRootLogin no <- 是否允许root用户远程登陆(企业环境中一般设置为 no
  9. PermitEmptyPasswords no <- 是否允许空密码
  10. UseDNS no <- 是否进行DNS反向解析(提升ssh远程连接效率)
  11. GSSAPIAuthentication no <- 是否进行远程GSSAPI认证(提升ssh远程连接效率)
  12.  
  13. # 修改完配置文件后要重启 ssh 服务端服务: /etc/init.d/sshd restart

6. SSH远程传输方法 --- sftp

  1. # 命令如: sftp -oPort=52113 oldboy@10.0.0.41
  2.  
  3. # sftp常用操作命令总结
  4. bye Quit sftp <-- 表示退出sftp传输模式
  5. cd path Change remote directory to 'path' <-- 改变远程目录信息
  6. pwd Display remote working directory <-- 显示远程主机当前目录信息
  7. lcd path Change local directory to 'path' <-- 改变本地目录路径信息
  8. lpwd Print local working directory <-- 输出本地目录路径信息
  9. get [-P] remote-path [local-path]
  10. Download file <-- 下载文件命令
  11. put [-P] local-path [remote-path] <-- 上传文件命令
  12. Upload file

ansible批量管理服务介绍

1. 批量管理服务知识介绍

  1. a. ansible是一个基于Python开发的自动化运维工具
  2. b. ansible是一个基于ssh协议实现远程管理的工具
  3. c. ansible软件可以实现多种批量管理操作(批量系统配置、批量软件部署、批量文件拷贝、批量运行命令)
  4. # 其它的批量管理服务: saltstack puppet

2. 批量管理服务特征介绍

  1. a. ansible软件服务端(管理端):不需要启动任何服务 默认服务端不需要任何的配置
  2. b. ansible软件客户端(受控端):没有客户端软件安装

3. ansible软件安装部署

  1. # 3.1 ansible软件自动化环境架构规划
  2. 管理主机1台:
  3. 10.0.0.61 主机名:m01
  4. 受控主机3台:
  5. 10.0.0.41 主机名:backup
  6. 10.0.0.31 主机名:nfs01
  7. 10.0.0.7 主机名:web01
  8. Linux系统 6.9
  9.  
  10. # 3.2 ansible软件自动化部署条件
  11. # 建议基于ssh密钥方式建立远程连接
  12. 3.2.1 ssh密钥对创建(管理主机)
  13. ssh-keygen -t dsa # 交互式创建密钥对
  14. # 影响免交互创建密钥对创建因素:
  15. a. 需要指定私钥存放路径
  16. -f /root/.ssh/id_dsa # 指定私钥存放路径的参数
  17.  
  18. b. 需要进行私钥文件密码设定
  19. -N -P 参数是解决私钥文件密码的设定
  20. -N "" -P "" # 免除私钥文件密码设定的参数值
  21.  
  22. # 免交互创建密钥对方法:
  23. [root@m01 .ssh]# ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""
  24.  
  25. 3.2.2 分发公钥文件(管理主机进行分发)
  26. ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31 # 交互式的分发公钥
  27. # 影响免交互批量分发密钥因素:
  28. a. 需要有确认连接过程,需要输入yes/no
  29. -o StrictHostKeyChecking=no # 可用于 免交互分发公钥的免除确认连接过程
  30.  
  31. b. 需要解决密码问题
  32. # sshpass -p登陆密码 # 免交互公钥分发的免除密码的方式
  33. [root@m01 ~]# sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31 # 免交互公钥分发的免除密码的方式; sshpass -p登陆密码
  34. Now try logging into the machine, with "ssh '172.16.1.31'", and check in:
  35.  
  36. .ssh/authorized_keys
  37.  
  38. to make sure we haven't added extra keys that you weren't expecting.
  39.  
  40. # 需要先安装 sshpass
  41. [root@m01 ~]# yum install -y sshpass
  42.  
  43. # 免交互分发公钥最终形式的命令:
  44. [root@m01 ~]# sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.31" # 用的是内网ip
  45. Warning: Permanently added '172.16.1.31' (RSA) to the list of known hosts.
  46. Now try logging into the machine, with "ssh '-o StrictHostKeyChecking=no 172.16.1.31'", and check in:
  47.  
  48. .ssh/authorized_keys
  49.  
  50. to make sure we haven't added extra keys that you weren't expecting.
  51.  
  52. [root@m01 ~]#
  53.  
  54. c. 免交互批量分发公钥脚本
  55. #!/bin/bash
  56. \rm -f /root/.ssh/id_dsa* # 先把已经保存的密钥删除
  57.  
  58. ssh-keygen -t dsa -f /root/.ssh/id_dsa -N "" # 创建新的密钥
  59.  
  60. for ip in 7 31 41
  61. do
  62. sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip" # $ip 是变量
  63. done
  64.  
  65. # 注:利用 ssh-copy-id 命令指定端口分发公钥方法:
  66. ssh-copy-id -i /root/.ssh/id_dsa.pub "172.16.1.31 -p52113" # -p52113 用于指定端口;把指定的端口和ip 放在一起作为一个变量
  67.  
  68. d. 检查是否可以进行基于密钥远程管理
  69. [root@m01 ~]# ssh 172.16.1.31 uptime # ssh ip 命令
  70.  
  71. # 脚本:
  72. #!/bin/bash
  73. if [ $# -ne 1 ] # 变量的数量不为1
  74. then
  75. echo "pls input one arg"
  76. exit 1
  77. fi
  78.  
  79. for ip in 7 31 41
  80. do
  81. echo ====172.16.1.$ip info===
  82. ssh 172.16.1.$ip $1
  83. done
  84.  
  85. # 3.3 ansible软件下载安装
  86. # ansible 管理主机软件安装:
  87. yum install -y ansible
  88. # ansible受控主机软件安装(可选):
  89. yum install -y libselinux-python # 可解决ansible管理端和被管理端由于selinux开启而引起的连接异常(所有受控端都安装)
  90.  
  91. # 3.4 ansible软件受控主机添加配置
  92. # 方式一: 全部依靠密钥的方式连接被管理主机
  93. [root@m01 ~]# cat /etc/ansible/hosts
  94. [neo] # 管理分组名
  95. 172.16.1.7 # ip地址(分发公钥的ip)
  96. 172.16.1.31
  97. 172.16.1.41
  98. [root@m01 ~]# ansible neo -m command -a "hostname" # ansible 管理主机信息或者主机组信息 -m 模块名称 -a 相关模块参数
  99. 172.16.1.7 | SUCCESS | rc=0 >>
  100. web01
  101.  
  102. 172.16.1.41 | SUCCESS | rc=0 >>
  103. backup
  104.  
  105. 172.16.1.31 | SUCCESS | rc=0 >>
  106. nfs01
  107.  
  108. [root@m01 ~]#
  109.  
  110. # 方式二:个别主机依靠口令(密码)
  111. [root@m01 ~]# cat /etc/ansible/hosts
  112. [neo]
  113. 172.16.1.7 ansible_user=root ansible_password=123456 # 如果 172.16.1.7 这台主机没有公钥,可通过在配置文件配置用户名和密码的方式管理
  114. 172.16.1.31
  115. 172.16.1.41
  116.  
  117. # 方式三:通过口令交互式管理单台主机
  118. [root@m01 ~]# ansible 172.16.1.7 -m command -a "hostname" -k # -k 参数表示交互式
  119. SSH password:
  120. 172.16.1.7 | SUCCESS | rc=0 >>
  121. web01
  122.  
  123. [root@m01 ~]#

4.ansible软件应用过程

  1. # ansible软件模块:
  2. [root@m01 ~]# ansible-doc -l |wc -l
  3. 1852
  4.  
  5. 语法: ansible 管理主机信息或者主机组信息 -m 模块名称 -a 相关模块参数
  6.  
  7. 主机信息:远程主机IP地址 远程主机组名称 远程所有主机all
  8. -m 指定相应模块
  9. -a 利用模块中某些参数功能
  10.  
  11. # 命令类型模块:
  12. 第一个模块:command
  13. 官方参考链接:http://docs.ansible.com/ansible/latest/modules/command_module.html
  14.  
  15. 参数:chdir---在执行莫个命令前,先切换目录
  16. [root@m01 ~]# ansible 172.16.1.31 -m shell -a "hostname&date"
  17. 172.16.1.31 | SUCCESS | rc=0 >>
  18. Tue May 28 23:36:41 CST 2019
  19. nfs01
  20.  
  21. [root@m01 ~]# ansible 172.16.1.31 -m shell -a "chdir=/tmp/ pwd"
  22. 172.16.1.31 | SUCCESS | rc=0 >>
  23. /tmp
  24.  
  25. [root@m01 ~]#
  26.  
  27. 参数:creates---判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
  28. [root@m01 ~]# ansible 172.16.1.41 -m command -a "creates=/etc/rsyncd.conf hostname"
  29. 172.16.1.41 | SUCCESS | rc=0 >>
  30. skipped, since /etc/rsyncd.conf exists
  31.  
  32. [root@m01 ~]# ansible 172.16.1.41 -m command -a "creates=/etc/rsyncd.conf.bak hostname"
  33. 172.16.1.41 | SUCCESS | rc=0 >>
  34. backup
  35.  
  36. [root@m01 ~]#
  37.  
  38. 参数:removes---判断一个文件是否存在,如果不存在,后面的命令就不会执行(存在了才会执行)
  39. [root@m01 ~]# ansible 172.16.1.41 -m command -a "removes=/etc/rsyncd.conf hostname"
  40. 172.16.1.41 | SUCCESS | rc=0 >>
  41. backup
  42.  
  43. [root@m01 ~]# ansible 172.16.1.41 -m command -a "removes=/etc/rsyncd.conf.bak hostname"
  44. 172.16.1.41 | SUCCESS | rc=0 >>
  45. skipped, since /etc/rsyncd.conf.bak does not exist
  46.  
  47. [root@m01 ~]#
  48.  
  49. 参数(必须要有的):free_form---表示执行command模块时,必须要有linux合法命令信息
  50.  
  51. # 第二个模块:shell模块(万能模块)
  52. 参数:chdir---在执行莫个命令前,先切换目录
  53. 参数:creates---判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
  54. 参数:removes---判断一个文件是否存在,如果不存在,后面的命令就不会执行
  55. 参数(必须要有的):free_form---表示执行command模块时,必须要有linux合法命令信息
  56.  
  57. [root@m01 ~]# ansible 172.16.1.41 -m shell -a "ls;pwd"
  58. 172.16.1.41 | SUCCESS | rc=0 >>
  59. anaconda-ks.cfg
  60. data
  61. echotest.txt
  62. install.log.syslog
  63. /root
  64.  
  65. [root@m01 ~]#
  66. # 说明:shell模块可以满足command模块所有功能,并且可以支持识别特殊字符信息 < > ; | &
  67.  
  68. # 第三个模块:script---专门运行脚本模块;把本地的脚本在远程主机上执行
  69. 参数:chdir---在执行莫个命令前,先切换目录
  70. 参数:creates---判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
  71. 参数:removes---判断一个文件是否存在,如果不存在,后面的命令就不会执行
  72. 参数(必须要有的):free_form---表示执行command模块时,必须要有linux合法命令信息
  73.  
  74. [root@m01 ~]# ansible 172.16.1.41 -m script -a "/server/scripts/yumtest.sh"
  75.  
  76. # 文件类型模块:
  77. # 第一个模块:copy----复制模块
  78. 参数:src---定义要推送数据信息
  79. 参数:dest---定义将数据推送到远程主机什么目录中
  80. [root@m01 ~]# ansible 172.16.1.41 -m copy -a "src=/tmp/file01.txt dest=/tmp/" # dest 的 /tmp 后面要加上 / ,否则ansible会把其当作一个文件
  81.  
  82. 参数:backup---对数据信息进行备份
  83. [root@m01 tmp]# ansible 172.16.1.41 -m command -a "cat /tmp/file01.txt"
  84. 172.16.1.41 | SUCCESS | rc=0 >>
  85. 123456
  86.  
  87. [root@m01 tmp]# echo 654321>file01.txt # 修改 m01 上的 file01.txt
  88. [root@m01 tmp]# ansible 172.16.1.41 -m copy -a "src=/tmp/file01.txt dest=/tmp/ backup=yes" # backup=yes 表示备份,其默认值为 no
  89. 172.16.1.41 | SUCCESS => {
  90. "backup_file": "/tmp/file01.txt.7138.2019-05-29@19:00:19~",
  91. "changed": true,
  92. "checksum": "1c5b0c3eedfc2539fce525f26d4f84935cb77d3c",
  93. "dest": "/tmp/file01.txt",
  94. "gid": 0,
  95. "group": "root",
  96. "md5sum": "4a62cf6ee3f8d889e65af1cc271f20fa",
  97. "mode": "",
  98. "owner": "root",
  99. "size": 7,
  100. "src": "/root/.ansible/tmp/ansible-tmp-1559127617.05-115855996071909/source",
  101. "state": "file",
  102. "uid": 0
  103. }
  104. [root@m01 tmp]# ansible 172.16.1.41 -m shell -a "ls -l /tmp/file01*"
  105. 172.16.1.41 | SUCCESS | rc=0 >>
  106. -rw-r--r-- 1 root root 7 May 29 19:00 /tmp/file01.txt # 此文件为在 m01 上修改后的文件
  107. -rw-r--r-- 1 root root 7 May 29 18:48 /tmp/file01.txt.7138.2019-05-29@19:00:19~ # 此文件为原先在 172.16.1.41主机上的 file01.txt 文件(此时变成了备份文件)
  108. [root@m01 tmp]# ansible 172.16.1.41 -m command -a "cat /tmp/file01.txt"
  109. 172.16.1.41 | SUCCESS | rc=0 >>
  110. 654321 # 修改后的内容
  111. [root@m01 tmp]# ansible 172.16.1.41 -m command -a "cat /tmp/file01.txt.7138.2019-05-29@19:00:19~"
  112. 172.16.1.41 | SUCCESS | rc=0 >>
  113. 123456 # 原先的内容
  114.  
  115. [root@m01 tmp]#
  116.  
  117. 参数:owner---设置复制后的文件属主权限
  118. 参数:group---设置复制后的文件属组权限
  119. 参数:mode---设置复制后的文件权限(600 755
  120.  
  121. # 第二个模块:file----文件属性修改/目录创建/文件创建
  122. 参数:owner---设置复制后的文件属主权限
  123. 参数:group---设置复制后的文件属组权限
  124. 参数:mode---设置复制后的文件权限(600 755
  125. [root@m01 ~]# ansible 172.16.1.41 -m file -a "dest=/tmp/file01.txt owner=oldboy group=oldboy mode=600"
  126. 172.16.1.41 | SUCCESS => {
  127. "changed": true,
  128. "gid": 500,
  129. "group": "oldboy",
  130. "mode": "",
  131. "owner": "oldboy",
  132. "path": "/tmp/file01.txt",
  133. "size": 7,
  134. "state": "file",
  135. "uid": 500
  136. }
  137.  
  138. 参数:state---用于指定创建目录或文件
  139. # state=touch 创建文件
  140. [root@m01 ~]# ansible 172.16.1.41 -m file -a "dest=/tmp/file02.txt state=touch"
  141. 172.16.1.41 | SUCCESS => {
  142. "changed": true,
  143. "dest": "/tmp/file02.txt",
  144. "gid": 0,
  145. "group": "root",
  146. "mode": "",
  147. "owner": "root",
  148. "size": 0,
  149. "state": "file",
  150. "uid": 0
  151. }
  152.  
  153. # state=directory 创建文件
  154. [root@m01 ~]# ansible 172.16.1.41 -m file -a "dest=/tmp/dir01 state=directory"
  155. 172.16.1.41 | SUCCESS => {
  156. "changed": true,
  157. "gid": 0,
  158. "group": "root",
  159. "mode": "",
  160. "owner": "root",
  161. "path": "/tmp/dir01",
  162. "size": 4096,
  163. "state": "directory",
  164. "uid": 0
  165. }
  166.  
  167. # 包管理模块类型:
  168. # 模块:yum---安装软件包模块
  169. 参数 name:执行要安装软件的名称,以及软件的版本
  170. 参数 stateinstalled(安装) absent(卸载)
  171. [root@m01 ~]# ansible 172.16.1.41 -m yum -a "name=iftop state=installed" # 安装软件
  172. [root@m01 ~]# ansible 172.16.1.41 -m yum -a "name=iftop state=absent" # 卸载软件
  173.  
  174. 参数 list:指定软件名称,查看软件是否可以安装,以及是否已经安装过了
  175. [root@m01 ~]# ansible 172.16.1.41 -m yum -a "list=iftop"
  176. 172.16.1.41 | SUCCESS => { # 此结果表示软件没有安装
  177. "changed": false,
  178. "results": [
  179. {
  180. "arch": "x86_64",
  181. "envra": "0:iftop-1.0-0.14.pre4.el6.x86_64",
  182. "epoch": "",
  183. "name": "iftop",
  184. "release": "0.14.pre4.el6",
  185. "repo": "epel",
  186. "version": "1.0",
  187. "yumstate": "available" # 表示该软件在其yum源上有
  188. }
  189. ]
  190. }
  191.  
  192. # 系统模块类型
  193. 模块:service---管理服务状态模块
  194. name: 指定要管理的服务名称(管理的服务一定在chkconfig中可以看到)
  195. statestopped started restarted reloaded
  196. enabledyes表示服务开机自启动 no表示服务开机不要自动启动
  197.  
  198. [root@m01 ~]# ansible 172.16.1.41 -m service -a "name=crond state=started enabled=yes"
  199.  
  200. # cron---定时任务模块
  201. * * * * * /bin/sh /server/scripts/test.sh &>/dev/null
  202.  
  203. minute=0-59 * */n , - hour day month weekday job='/bin/sh /server/scripts/test.sh &>/dev/null' # job 表示定时任务的内容
  204.  
  205. 添加定时任务:
  206. ansible 172.16.1.41 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
  207. ansible 172.16.1.41 -m cron -a "name=oldboy02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'" # name表示定时任务的名称
  208.  
  209. 删除定时任务
  210. ansible 172.16.1.41 -m cron -a "name=oldboy02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' state=absent"
  211. ansible 172.16.1.41 -m cron -a "name=oldboy01 state=absent" # state=absent 表示删除定时任务
  212.  
  213. 注释定时任务
  214. ansible 172.16.1.41 -m cron -a "name=oldboy01 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=yes"
  215. ansible 172.16.1.41 -m cron -a "name=oldboy01 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=no" # disable=no 表示 注释掉定时任务
  216.  
  217. # 总结ansible颜色信息:
  218. 绿色:查看远程主机信息,不会对远程主机系统做任何修改
  219. 红色:执行操作出现异常错误
  220. 黄色:对远程主机系统进行修改操作
  221. 粉色:警告或者忠告信息

ansible软件剧本

  1. 编写剧本规范:
  2. # http://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
  3. 遵循pyyaml
  4. ①. - 用法说明,表示列表显示的内容
  5. 水果信息:
  6. - 苹果
  7. - 香蕉
  8. - 西瓜
  9. ②. : 用法说明: 类似于 NoSQL 中的 key-value
  10. 姓名: 张三
  11. 性别:
  12. 人员信息:
  13. - 运维人员: sa
  14. - 开发人员: dev
  15. - 存储人员: dba
  16. ③. 空格 用法说明:
  17. 对内容进行分级时,需要有两个空格表示分级
  18. 软件安装步骤:
  19. - 服务端安装步骤:
  20. 第一个里程碑: 检查软件是否安装
  21. 第二个里程碑: 编写配置文件内容
  22. - 客户端安装步骤:
  23. 补充:必须使用空格分隔ansible剧本级别,一定不要使用tab键进行分割

一键化部署rsync服务:

rsync.yaml 文件的内容如下:

  1. # command play-book
  2.  
  3. - hosts: 172.16.1.41
  4. tasks:
  5. - name: step01:install rsync
  6. yum: name=rsync state=installed
  7. - name: step02:edit rsync conf file
  8. copy: src=/etc/ansible/conf/rsync_conf/rsyncd.conf dest=/etc/
  9. - name: step03:create rsync user
  10. user: name=rsync state=present createhome=no shell=/sbin/nologin
  11. - name: step04:create auth file
  12. copy: src=/etc/ansible/conf/rsync_conf/rsync.password dest=/etc/ mode=600
  13. - name: step05:create backup dir
  14. file: dest=/backup state=directory owner=rsync group=rsync
  15. - name: step06:boot rsync server
  16. shell: rsync --daemon creates=/var/run/rsyncd.pid
  17.  
  18. - hosts: 172.16.1.31
  19. tasks:
  20. - name: step01:create auth file
  21. copy: src=/etc/ansible/conf/rsync_conf/rsync_client.password dest=/etc/rsync.password mode=600

Linux(11):期中架构(3)--- SSH远程管理服务 & ansible 批量管理服务的更多相关文章

  1. Windows和linux虚拟机之间联网实现SSH远程连接以及VMware的3种网络模式[NAT、桥接和Host-only]

    Windows和linux虚拟机之间联网实现SSH远程连接以及VMware的3种网络模式[NAT.桥接和Host-only] 作者:天齐 一.Windows和linux虚拟机之间联网实现SSH远程连接 ...

  2. 使用ansible批量管理远程服务器

    使用ansible批量管理远程服务器 背景 本地需要管理远程的一批服务器,主要执行以下任务: 1) 将本地的文件复制到远端所有服务器: 2) 需要在远程服务器中执行一个个命令: 远端服务器路径并非完全 ...

  3. 六.ansible批量管理服务

    期中集群架构-第六章-ansible批量管理服务介绍====================================================================== 01. ...

  4. ansible批量管理服务 上

    1 ansible简介 1.1 ansible批量管理服务概述 (1)是基于python语言开发的自动化软件工具(2)是基于SSH远程管理服务实现远程主机批量管理(3)并行管理,部署简单,应用也简单方 ...

  5. Ansible 批量管理Windows Server服务器

    Ansible批量管理Windows Server         Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具,  它用Python写成,类似于saltstack和Puppe ...

  6. Linux学习笔记19-ssh远程管理

    远程管理 服务器一般运行在IDC机房中,一般都是通过远程管理方式对服务器进程控制. 常见的远程管理工具: RDP(remote desktop protocol)协议,window远程桌面管理 Tel ...

  7. linux运维、架构之路-ansible批量管理

    一.ansible软件 1.介绍 ①ansible是一个基于Python开发的自动化运维工具 ②其功能实现基于SSH远程连接服务 ③ansible可以实现批量系统配置.批量软件部署.批量文件拷贝.批量 ...

  8. Linux中ansible批量管理软件部署及剧本编写

    服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29: ...

  9. Linux系统——Ansible批量管理工具

    批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...

随机推荐

  1. hihoCoder #1079 : 离散化 (线段树,数据离散化)

    题意:有一块宣传栏,高一定,给出长度,再给出多张海报的张贴位置,问还能见到几张海报(哪怕有一点被看到)?假设海报的高于宣传栏同高. 思路:问题转成“给出x轴上长为L的一条线段,再用n条线段进行覆盖上去 ...

  2. 将sql 查询结果导出到excel

    在平时工作中经常会遇到,sql 查询数据之后需要发送给业务人员,每次都手工执行脚本然后拷贝数据到excel中,比较耗时耗力,可以考虑自动执行查询并将结果邮件发送出来. 分两步实现: 1.执行查询将结果 ...

  3. Entity Framework插入数据报错:Validation failed for one or more entities

    www.111cn.net 编辑:lanve 来源:转载 今天在处理Entity Framework插入数据库时,报错: Validation failed for one or more entit ...

  4. Solr笔记(2)_Schema.xml和solrconfig.xml分析

    现在我们开始研究载入的数据部分(importing data) 在正式开始前,我们先介绍一个存储了大量音乐媒体的网站http://musicbrainz.org , 这里的数据都是免费的,一个大型开放 ...

  5. ERROR 14856 --- [reate-882003853] com.alibaba.druid.pool.DruidDataSource : create connection error, url: jdbc:mysql://localhost:3306/xhb?useUnicode=true&characterEncoding=UTF-8, errorCode 1045, sta

    ERROR 14856 --- [reate-882003853] com.alibaba.druid.pool.DruidDataSource : create connection error, ...

  6. k8s 创建资源的两种方式【转】

    命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx ...

  7. 解决IllegalBlockSizeException:last block incomplete in decryption异常

    解决IllegalBlockSizeException:last block incomplete in decryption异常分类: webkit android最近做个加解密的实现,虽然实现了, ...

  8. Codeforces Round #271 (Div. 2)-A. Keyboard

    http://codeforces.com/problemset/problem/474/A A. Keyboard time limit per test 2 seconds memory limi ...

  9. fckeditor配置详解

    使用配置设置: . FCKConfig.CustomConfigurationsPath = '' ; // 自定义配置文件路径和名称 . FCKConfigFCKConfig.EditorAreaC ...

  10. 【Java_基础】并发、并行、同步、异步、多线程的区别

    1. 并发:位于同一个处理器上的多个已开启未完成的线程,在任意一时刻系统调度只能让一个线程获得CPU资源运行,虽然这种调度机制有多种形式(大多数是以时间片轮巡为主).但无论如何,都是通过不断切换需要运 ...