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组。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
21天前
|
应用服务中间件 网络安全 数据安全/隐私保护
网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
71 14
|
7月前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
4月前
|
安全 网络安全 数据安全/隐私保护
Debian 12系统中允许Root远程SSH登录解决方法!
在 Debian 12 系统中开启 SSH 远程 Root 登录需修改 SSH 配置文件 (`sshd_config`),将 `PermitRootLogin` 设置为 `yes` 并确保密码认证启用。完成后重启 SSH 服务并验证连接。若防火墙启用,需放行端口 22。注意,直接开放 Root 登录可能带来安全风险,建议使用普通用户登录后切换至 Root。
315 1
|
6月前
|
人工智能 自然语言处理 语音技术
FilmAgent:多智能体共同协作制作电影,哈工大联合清华推出 AI 驱动的自动化电影制作工具
FilmAgent 是由哈工大与清华联合推出的AI电影自动化制作工具,通过多智能体协作实现从剧本生成到虚拟拍摄的全流程自动化。
2413 13
FilmAgent:多智能体共同协作制作电影,哈工大联合清华推出 AI 驱动的自动化电影制作工具
|
5月前
|
监控 jenkins 测试技术
Ansible与Jenkins:自动化工具的对比
Ansible和Jenkins是自动化领域的两大巨头。Ansible专注于配置管理和任务自动化,采用无代理架构,使用YAML定义配置,具有幂等性和可扩展性。Jenkins则擅长持续集成和持续交付(CI/CD),支持丰富的插件生态系统,适用于自动化构建、测试和部署。两者各有优势,Ansible适合配置管理与大规模部署,Jenkins则在CI/CD方面表现出色。结合使用可创建更强大的自动化工作流,提升团队生产力和软件质量。选择工具时应根据具体需求决定。
|
4月前
|
人工智能 数据可视化 安全
2025年销售自动化工具选型指南
本文探讨了企业在数字经济时代选择合适CRM系统的重要性,分析了选型的5大核心维度:AI能力、全流程闭环管理、生态集成能力、数据安全合规及供应商综合实力。同时对比了5家国内外CRM厂商,如Salesforce、纷享销客、Hubspot等,并指出企业常遇的3大选型误区,包括功能冗余、忽视数据迁移成本和迷信行业模板。文章强调,适合企业的CRM需与战略、管理和业务流程深度适配,而非单纯追求技术堆砌。最终提醒管理者,选择CRM时应以实际需求为导向,而非盲目迷信国际品牌。
|
7月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
473 17
Selenium:强大的 Web 自动化测试工具
|
6月前
|
弹性计算 运维 监控
自动化AutoTalk第十一期-应知必会的自动化工具之阿里云配额中心
本次分享主题为“应知必会的自动化工具之阿里云配额中心”,课程围绕三个方面展开:1) 认识配额及其作用;2) 配额管理的意义与方法;3) 阿里云配额中心的功能和使用场景。通过学习,了解如何有效管理和监控配额,避免资源限制影响业务,并实现自动化集成,提升运维效率。
123 10
|
6月前
|
JavaScript Java 开发工具
AutoTalk第十三期-应知必会的自动化工具-阿里云SDK支持策略(一)
AutoTalk第十三期探讨阿里云SDK支持策略,涵盖四大方面:发布策略、版本规范、更新策略及停止支持策略。重点介绍SDK的及时性、完整性、测试覆盖度和版本命名规范;并以Python部分语言版本停止支持为案例,帮助开发者了解维护策略,确保平稳过渡到新版本。
123 6
|
6月前
|
算法 安全 Java
自动化AutoTalk第十期:应知必会的自动化工具-阿里云SDK
本期《自动化AutoTalk》第十期聚焦应知必会的自动化工具——阿里云SDK。主要内容分为三部分:1. 阿里云SDK概述,介绍其支持的300多款云产品和8种主流编程语言;2. 快速生成SDK示例,以Java语言为例展示如何通过OpenAPI门户快速生成并下载SDK工程;3. 进阶特性介绍,涵盖签名算法、Endpoint配置、代理设置、HTTPS请求配置、超时机制及异常处理等重要功能。通过这些内容,帮助开发者更高效、安全地使用阿里云SDK。
189 3