Ansible自动化运维工具之个性化定制SSH连接登录端口(3)

简介: Ansible自动化运维工具之个性化定制SSH连接登录端口(3)

前言:


在日常使用Ansible自动化运维工具时,肯定都会配置管理端与被控端的无密码连接,,需要注意的是虽然ssh默认连接端口为22.但是在实际生产环境中,为了安全考虑,很有可能某些主机的ssh端口被更改了,所以就需要使用ansible_ssh_port=端口号 来指定某台主机的ssh端口或者用户名,指定之后ansible才可以正常的控制这些主机.


环境介绍:


管理主机 k8s_master1 192.168.1.18


被托管主机 k8s_node1 192.168.1.19


被托管主机 K8S_node2 192.168.1.20


操作系统 Centos 7.5


被托管主机k8s_node1配置:


1.查看被托管主机k8s_node1的ssh默认端口

[root@k8s_node1 ~]# ss -antulp |grep :22
tcp    LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=886,fd=3))
tcp    LISTEN     0      128      :::22                   :::*                   users:(("sshd",pid=886,fd=4))

2.修改被托管主机k8s_node1的ssh默认端口

[root@k8s_node1 ~]# vim /etc/ssh/sshd_config
 ...
 17 Port 222      //默认端口为22,修改为222并取消注释
 18 #AddressFamily any
 ...

3.重启被托管主机k8s_node1的sshd服务

[root@k8s_node1 ~]# systemctl restart sshd
[root@k8s_node1 ~]# ss -antulp | grep sshd
tcp    LISTEN     0      128       *:222                   *:*                   users:(("sshd",pid=1801,fd=3))
tcp    LISTEN     0      128      :::222                  :::*                   users:(("sshd",pid=1801,fd=4))
[root@k8s_node1 ~]# ss -antulp | grep :222
tcp    LISTEN     0      128       *:222                   *:*                   users:(("sshd",pid=1801,fd=3))
tcp    LISTEN     0      128      :::222                  :::*                   users:(("sshd",pid=1801,fd=4))

 可以看到被托管主机k8s_node1的ssh端口已经被修改为222了,现在使用ansible来控制。


管理主机k8s_master1测试:

[root@k8s_master1 ~]# cat /etc/ansible/hosts   //查看ansible控制的主机列表
...
[k8s_node]
k8s_node1
k8s_node2
[root@k8s_master1 ~]# ansible k8s_node --list-hosts
  hosts (2):
    k8s_node1
    k8s_node2
[root@k8s_master1 ~]# ansible k8s_node  -m  ping
k8s_node1 | UNREACHABLE! => {
    "changed": false,  ----》//可以看到k8s_node1端口修改后无法ping通
    "msg": "Failed to connect to the host via ssh: ssh: connect to host k8s_node1 port 22: Connection refused",
    "unreachable": true
}
k8s_node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

查看管理主机k8s_master1 默认配置文件:

[root@k8s_master1 ~]# cat /etc/ansible/ansible.cfg  //以下配置中的参数都是默认的,如果不需要修改某项参数的话,就不需要管(不需要取消注释),默认就好。
 ...
 14 inventory      = /etc/ansible/hosts
 15 library        = /usr/share/my_modules/
 20 forks          = 5
 22 sudo_user      = root
 26 remote_port    = 22
 71 host_key_checking = False
 103 timeout = 20
 111 log_path = /var/log/ansible.log
 ...

 可以看到/etc/ansible/ansible.cfg配置文件中指定inventory配置文件为/etc/ansible/hosts文件,并且第26行remote_port = 22表明ansible将使用ssh的默认端口22,假如在ansible控制的所有主机列表中某些主机的ssh端口都不一致怎么办呢?


--> 这时候我们就需要在/etc/ansible/ansible.cfg配置文件中指定inventory配置文件/etc/ansible/hosts文件中配置使用inventory变量了。


inventory


 inventory⽤于定义ansible要管理的主机列表,可以定义单个主机和主机组。上⾯的/etc/ansible/hosts就是默认的inventory。下⾯展⽰一些inventory常⽤的定义规则:


  • ansible_ssh_host:ansible使⽤ssh要连接的主机。


  • ansible_ssh_port :ssh的端⼝。默认为22。


  • ansible_ssh_user:ssh登录的⽤户名。默认为root。


  • ansible_ssh_pass :ssh登录远程⽤户时的认证密码。


  • ansible_ssh_private_key_file:ssh登录远程⽤户时的认证私钥。(?)


  • ansible_connection :使⽤何种模式连接到远程主机。默认值为smart(智能),表⽰当本地ssh⽀持持久连接(controlpersist)时采⽤ssh连接,否则采⽤python的paramiko ssh连接。


  • ansible_shell_type :指定远程主机执⾏命令时的shell解析器,默认为sh(不是bash,它们是有区别的,也不是全路径)。


  • ansible_python_interpreter:远程主机上的python解释器路径。默认为/usr/bin/python。


  • ansible_*_interpreter:使⽤什么解释器。例如,sh、bash、awk、sed、expect、ruby等等。


 以上inventory文件中可以使用的一些内置变量根据实战中实际情况按需使用即可!


 其中有⼏个参数可以在配置⽂件ansible.cf g中指定,但指定的指令不太⼀样,以下是对应的配置项:


  • remote_port:对应于ansible_ssh_port。


  • remote_user:对应于ansible_ssh_user。


  • private_key_file:对应于ansible_ssh_private_key_file。


  • excutable:对应于ansible_shell_type。但有⼀点不⼀样,excutable必须指定全路径,⽽后者只需指定basename。


配置管理主机k8s_master1 的hosts文件:


使用ansible_ssh_port变量指定k8s_node1被托管主机的ssh端口为222。

[root@k8s_master1 ~]# vim /etc/ansible/hosts
...
[k8s_node]
k8s_node1 ansible_ssh_port=222   //使用ansible_ssh_port变量指定端口
k8s_node2

管理主机k8s_master1测试:

[root@k8s_master1 ~]# ansible k8s_node  -m  ping
k8s_node2 | SUCCESS => {          ---》指定k8s_node1正确ssh端口后成功ping通
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
k8s_node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

可以看到在/etc/ansible/ansible.cfg配置文件中指定inventory配置文件/etc/ansible/hostsd 配置文件中定义使用ansible_ssh_port变量指定k8s_node1被托管主机ssh端口后,即可正常控制不同ssh端口的不同主机,并且不会影响正常控制其他ssh端口为默认端口22的主机。


拓展例子:

cat -n /etc/ansible/hosts
1 192.168.100.59:22
2 192.168.100.60 ansible_ssh_pass=123456 ansible_ssh_port=22
3 [nginx]
4 192.168.100.5[7:9]
5 [nginx:vars]
6 ansible_ssh_pass='123456'
7 [webservers:children]
8 nginx

 第⼀⾏和第⼆⾏单独定义主机,第⼀⾏带上了连接被管节点的端⼝,第⼆⾏带上了单独传递给ssh的参数,分别是ssh连接时的登录远程⽤户的密码参数和ssh的连接端⼝。


第三⾏和第四⾏定义的是nginx主机组,该组中包含了192.168.100.57到59这3台主机。还⽀持字母的扩展,如"web[a-d]"。


 第五⾏和第六⾏定义了要传递给nginx主机组的变量。若定义为"[all:vars]"或"[*:vars]"则表⽰传递给所有主机的变量。


 第七和第⼋⾏定义了⼀个新的主机组webservers,该组的组成员有nginx组。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
20天前
|
敏捷开发
【sgCreatePinyin】自定义小工具:敏捷开发→自动化生成拼音字段名称(字段名生成工具)
【sgCreatePinyin】自定义小工具:敏捷开发→自动化生成拼音字段名称(字段名生成工具)
|
1月前
|
存储 运维 安全
构建高效自动化运维体系:Ansible与Docker的完美结合
【2月更文挑战第31天】 随着云计算和微服务架构的兴起,自动化运维成为保障系统稳定性和提升部署效率的关键手段。本文将详细探讨如何通过Ansible和Docker的结合来构建一个高效、可靠且易于管理的自动化运维体系。首先,介绍自动化运维的必要性及其在现代IT基础设施中的作用;然后,分别阐述Ansible和Docker的技术特点及优势;最后,提供一个基于Ansible和Docker结合使用的实践案例,以及实施过程中遇到的挑战和解决方案。
|
1月前
|
移动开发 安全 数据安全/隐私保护
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
|
1月前
|
运维 安全 网络安全
构建高效自动化运维体系:Ansible与Docker的完美融合
【2月更文挑战第30天】在当今快速迭代和持续部署的软件发展环境中,自动化运维成为确保效率和稳定性的关键。本文将探讨如何通过结合Ansible和Docker技术,构建一个高效的自动化运维体系。我们将分析Ansible的配置管理功能和Docker容器化的优势,并展示它们如何协同工作以简化部署流程,增强应用的可移植性,并提供一致性的系统环境。此外,文章还将介绍一些最佳实践,帮助读者在真实环境中实现这一整合方案。
|
1月前
|
测试技术
现代软件测试中的自动化工具与挑战
传统软件测试面临着越来越复杂的系统架构和不断增长的测试需求,自动化测试工具应运而生。本文将探讨现代软件测试中自动化工具的应用和挑战,深入分析其优势与局限性,为软件测试领域的发展提供思路和启示。
|
1月前
|
jenkins 测试技术 持续交付
现代软件测试中的自动化工具与挑战
随着软件开发领域的不断发展,自动化测试工具在测试过程中扮演着越来越重要的角色。本文将探讨现代软件测试中自动化工具的应用及面临的挑战,旨在帮助开发人员和测试人员更好地理解和应对自动化测试中的问题。
|
3天前
|
算法 安全 Linux
Ansible自动化工具copy复制用法
Ansible 中的 copy 模块用于将文件或目录从本地计算机或远程主机复制到远程主机上的特定位置。它是一个功能强大的模块,可用于各种文件传输任务. ### 作用 将配置文件复制到远程服务器 将应用程序部署到远程服务器 将日志文件从远程服务器复制到本地计算机 备份和恢复文件和目录
Ansible自动化工具copy复制用法
|
3天前
|
存储 运维 Kubernetes
构建高效自动化运维体系:Ansible与Kubernetes的协同策略
【4月更文挑战第25天】 在当今快速迭代的软件开发过程中,自动化运维已成为提升效率、保证一致性和降低人为错误的关键。本文将探讨如何利用Ansible作为配置管理工具,以及Kubernetes作为容器编排系统,共同构建一个高效、可靠的自动化运维体系。文章首先概述了自动化运维的基本概念及其重要性,随后详细分析了Ansible与Kubernetes在自动化流程中的作用与优势,并通过一系列实践案例,展示了两者如何协同工作以优化部署、扩缩容和灾难恢复等关键运维任务。最后,文中还讨论了在实际应用中可能遇到的挑战及相应的解决策略,为读者提供了一套完整的自动化运维解决方案参考。
|
5天前
|
存储 运维 Shell
Ansible自动化运维工具安装和基本使用
Ansible 是一款无代理的IT自动化工具,通过SSH连接目标主机执行配置管理、应用部署和云端管理任务。它使用YAML编写的Playbook定义任务,核心组件包括Playbook、模块、主机清单、变量等。Ansible的优势在于易用、功能强大、无须在目标主机安装额外软件,并且开源。安装过程涉及配置网络源、yum安装和SSH密钥设置。通过定义主机清单和使用模块进行通信测试,确保连接成功。
Ansible自动化运维工具安装和基本使用
|
5天前
|
机器学习/深度学习 运维 网络协议
运维工程师必会工具(Nmap和TCPdump)
运维工程师必会工具(Nmap和TCPdump)

热门文章

最新文章