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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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组。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
运维 监控 应用服务中间件
自动化运维:打造高效、稳定的系统环境
【8月更文挑战第30天】本文将探讨如何通过自动化运维技术,提升系统的稳定性和效率。我们将从基础概念出发,逐步深入到实践应用,分享一些实用的工具和技术,以及如何将这些工具和技术融入到日常的运维工作中。无论你是运维新手,还是有一定经验的老手,都能在这篇文章中找到有价值的信息。让我们一起探索自动化运维的世界,提升我们的工作效率,让系统运行得更加平稳。
|
1天前
|
运维 安全 应用服务中间件
自动化运维的利器:Ansible入门与实战网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【8月更文挑战第30天】在当今快速发展的IT时代,自动化运维已成为提升效率、减少错误的关键。本文将介绍Ansible,一种流行的自动化运维工具,通过简单易懂的语言和实际案例,带领读者从零开始掌握Ansible的使用。我们将一起探索如何利用Ansible简化日常的运维任务,实现快速部署和管理服务器,以及如何处理常见问题。无论你是运维新手还是希望提高工作效率的资深人士,这篇文章都将为你开启自动化运维的新篇章。
|
1天前
|
数据采集 运维 Devops
探索Python编程之美:从基础到进阶自动化运维的变革之路:从脚本到DevOps
【8月更文挑战第30天】在数字化时代的浪潮中,编程已经成为一门重要的技能。Python以其简洁明了的语法和强大的功能,成为了许多初学者的首选编程语言。本文将通过浅显易懂的语言,带领读者从Python的基础语法出发,逐步深入到面向对象编程、网络爬虫开发以及数据分析等高级应用,旨在帮助初学者构建扎实的编程基础,并激发他们进一步探索编程世界的热情。文章不仅分享实用的编程技巧,还将探讨如何将编程知识应用于解决实际问题,以期培养读者的问题解决能力和创新思维。
|
2天前
|
测试技术
基于LangChain手工测试用例转Web自动化测试生成工具
该方案探索了利用大模型自动生成Web自动化测试用例的方法,替代传统的手动编写或录制方式。通过清晰定义功能测试步骤,结合LangChain的Agent和工具包,实现了从功能测试到自动化测试的转换,极大提升了效率。不仅减少了人工干预,还提高了测试用例的可维护性和实用性。
12 4
|
1天前
|
运维 监控 调度
自动化运维:使用Python脚本简化日常任务
【8月更文挑战第30天】本文通过介绍如何使用Python脚本来简化和自动化日常的运维任务,旨在帮助读者提升工作效率。文章将重点介绍如何使用Python的基本库以及如何创建简单的脚本来处理文件、监控服务器状态和自动化备份过程。我们将从基础开始,逐步深入到更复杂的应用场景,使读者能够根据实际需要编写自己的自动化脚本。
|
1天前
|
运维 监控 Cloud Native
自动化运维的魔法书云原生之旅:从容器化到微服务架构的演变
【8月更文挑战第29天】本文将带你领略自动化运维的魅力,从脚本编写到工具应用,我们将一起探索如何通过技术提升效率和稳定性。你将学会如何让服务器自主完成更新、监控和故障修复,仿佛拥有了一本能够自动翻页的魔法书。
|
2天前
|
运维 Ubuntu 应用服务中间件
自动化运维:使用Ansible管理服务器
【8月更文挑战第29天】在当今快速发展的IT领域,自动化运维已成为提升效率和减少人为错误的关键技术。本文将引导你了解如何使用Ansible这一强大的自动化工具来简化服务器管理任务。从基础的安装、配置到高级的应用部署与维护,我们将一步步揭示Ansible如何让你轻松掌控多台服务器,确保系统稳定运行。文章末尾,你还将找到实用的代码示例,助你立刻上手实践。
|
2天前
|
运维 Ubuntu 应用服务中间件
自动化运维的利器:Ansible入门与实践
【8月更文挑战第29天】本文旨在为读者提供一份简明扼要的Ansible入门指南,通过通俗易懂的语言和实际案例,引导读者了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook。文章不仅涵盖了Ansible的基础使用,还探讨了其在自动化运维中的关键作用,鼓励读者思考如何将Ansible应用到日常工作中,以提升效率和减少人为错误。
|
1天前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:Ansible在现代IT架构中的应用与实践
【8月更文挑战第30天】随着信息技术的飞速发展,企业对运维效率和可靠性的要求日益增高。传统的手动运维方式已难以应对复杂多变的IT环境,自动化运维因此成为行业新宠。本文将深入探讨Ansible这一流行的自动化工具,如何通过其简洁的配置管理和强大的多节点部署能力,助力现代IT架构实现高效、可靠的运维管理。我们将从Ansible的核心概念入手,逐步解析其在配置管理、任务执行、应用部署等方面的实战应用,并结合代码示例,展示如何利用Ansible简化日常运维工作,提升运维质量和效率。无论你是运维新手还是资深专家,这篇文章都将为你提供宝贵的洞见和实操技巧。
|
1天前
|
运维 监控 安全
自动化运维:使用Python脚本简化日常任务
【8月更文挑战第30天】在数字化时代,运维工作的效率至关重要。本文将介绍如何通过编写Python脚本来自动化常见的运维任务,从而提升工作效率并减少人为错误。我们将从基础的系统管理任务着手,逐步深入到复杂的自动化流程,展示Python在运维自动化中的应用价值。

热门文章

最新文章

下一篇
云函数