百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

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

toqiye 2024-09-04 20:04 11 浏览 0 评论

前言:

?在日常使用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组。



如果您喜欢本文,就请动动您的发财手为本文点赞转发评论,想获取更多运维相关内容,请记得关注我。

相关推荐

Star 17.3k!给它一张屏幕截图,即可一键克隆网页!

本文为大家分享一款本周爆火的GPT开源项目。前言你敢信,只凭借着一张屏幕截图即可转换生成HTML/TailwindCSS代码。可以算得上是前端工程师的福音。它就是screenshot-to-...

AI从截图直接生成代码、前端程序员的福利!

简介项目可以将任何屏幕截图或设计转换为干净的代码(支持大多数框架)。来自领先公司的开发人员和设计师使用的排名第一的工具。完全开源,在GitHub上拥有超过35,000颗星。非常受欢迎。各位小伙...

一款高颜值、跨平台、自托管的免费开源CRM项目——Twenty

前言大家好,这里是可爱的Cherry。作为一个“甲方”,Cherry其实挺知道客户管理的重要的。但是对于客户管理怎么做,以及CRM的作用,我却是一无所知。之前有朋友在评论区留言,说有没有开源的CRM系...

解放双手,前端界面再也不用自己写了?

随着AI技术的发展,现在有越来越多的尝试将AI应用于UI设计和开发中,以期提高效率和降低成本。今天就给大家介绍一个开源的AI网页生成工具:OpenUIOpenUIOpenUI是一个创...

代码调试,教给你(代码调试是什么意思)

昨天我和一些朋友一起调试代码,他们做程序员这一行都不太久,我向他们展示了一些代码调试技巧。今天早上我在想,我应该如何教授他们学习代码调试?我在Twitter上发了一条推文说,我从来没有见过任何好的调试...

Screenshot-to-code:用屏幕截图生成代码

Screenshot-to-code是一个简单的工具,可使用AI将屏幕截图、模型和Figma设计转换为干净、实用的代码。现在支持ClaudeSonnet3.5和GPT-4o!Scre...

next实现原理(next method)

Next.js是一个基于React的服务器端渲染(SSR)和静态生成(SSG)框架,它的实现原理涉及多个关键技术点,包括服务端渲染(SSR)、静态生成(SSG)、客户端渲染(CSR)、...

可逐步操作的具体流程(可逐步操作的具体流程包括)

假设你是一个单人开发者,使用主流技术栈(React+Node.js+MySQL),以下是详细步骤:---###**一、需求分析与原型设计**1.**核心功能清单**-用户能添加、删除、...

截图转代码只需1步!你离高效开发只差这款神器

引言在现代前端开发中,将设计稿转换为代码是一个既重要又耗时的环节。手动编写HTML结构、调试CSS样式、调整布局对齐,不仅耗费时间,还容易出错。而Screenshot-to-Code这款革...

web开发 前端 后端(web开发前端后端)

区别:1、前端是指用户可见的界面,而后端是指用户看不到的东西,考虑底层业务逻辑的实现,平台的稳定性、性能等。2、前端开发用到的技术有HTML5、CSS3、JS、jQuery、Bootstrap、Nod...

手把手教你Dify私有化部署,打造专属AI平台

一、Dify是什么?Dify是一款极具创新性的开源LLM应用开发平台,它就像是一把万能钥匙,为开发者们打开了通往生成式AI应用开发新世界的大门。其融合了后端即服务(BackendasS...

前后端分离架构设计:提升开发效率与业务支撑力的密钥

前后端分离架构设计解析一、定义与核心思想前后端分离是一种将用户界面(前端)与业务逻辑(后端)解耦的架构模式,通过RESTfulAPI或GraphQL实现数据交互。前端专注于视图渲染与交互逻辑...

Kubernetes最小部署单元Pod(kubernetes最小部署单元)

一、Kubernetes与Pod简介在当今云计算和容器化技术盛行的时代,Kubernetes已然成为容器编排领域的中流砥柱。它是一个开源的容器编排平台,由Google基于其内部使用的Bo...

【程序员必藏!零基础本地部署DeepSeek大模型保姆级教程】

为什么选择本地部署?数据安全:敏感代码/业务数据永不外传闪电响应:局域网推理延迟<100ms,告别云端排队深度定制:自由修改模型代码,打造专属AI助手准备工具(5分钟搞定)1核心工具下载...

【Python程序开发系列】使用Flask实现前后端分离(案例)

这是我的第398篇原创文章。一、引言随着web开发的不断发展,前后端分离已成为越来越流行的架构设计。Flask是一个轻量级的Pythonweb框架,非常适合用于构建API,然后配合前端框...

取消回复欢迎 发表评论: