首页 > 其他分享 >自动化运维-《日常运维手册接入手册》之 服务器端口表

自动化运维-《日常运维手册接入手册》之 服务器端口表

时间:2024-08-10 18:16:11浏览次数:13  
标签:服务器端 运维 端口 PID 手册 become jps echo ports

前言:脚本编写不是一蹴而就,需要根据当前场景和实际需求不断测试和调整,最重要的是勇于踏出敢于尝试的这一步。

任务需求:在ansible-vault加密环境下,使用root权限批量将项目上所有服务器的tcp端口过滤掉22, 25, 53, 443,631,9100,10050端口 后显示出来;判断服务器上如果有jps命令的就执行,输出的所有的程序的PID,并显示PID对应的进程,查出各PID对应的端口;如果没有jps命令的服务器就只显示过滤后的端口信息。

1.0版本:

第一步:写一个在ansible上执行的脚本yaml文件

---
- name: 项目名
  hosts: 项目hosts名
  user: 普通用户
  vars_files:
    - "secrets.yml"
  vars:
    ansible_ssh_pass: "{{ lookup('vars', 'dms_password') }}"
    ansible_become_pass: "{{ lookup('vars', 'dms_password') }}"
  tasks:
    - name: just test
      become: yes
      become_user: root
      become_method: sudo
      shell:  netstat -tlnp

第二步执行命令:ansible-playbook -i /etc/ansible/hosts ***.yaml --ask-vault-pass -v
这个是输出项目上所有服务器的tcp端口,然后手动排查系统默认端口,各web服务,中间件和数据库等自己判断,jar应用又下一步来完成统计。

第三步 写个jps-pid-端口的脚本
这里我将错误的脚本和达不到的效果的脚本都列举出来
脚本1:

#!/bin/bash

# 获取 root 用户下的所有 Java 进程的 PID 和名称
PIDS_NAMES=$(sudo jps | awk '{print $1","$2}')

# 遍历每个 PID 和名称,查找对应的端口
for PID_NAME in $PIDS_NAMES; do
   PID=$(echo $PID_NAME | cut -d, -f1)
   NAME=$(echo $PID_NAME | cut -d, -f2)
   echo "PID: $PID, Name: $NAME"

   # 使用 lsof 查找端口
   PORTS=$(sudo lsof -a -p $PID -i -n | grep LISTEN | awk '{print $9}' | cut -d: -f2)
   # 或者使用 netstat 查找端口
   # PORTS=$(sudo netstat -anp | grep $PID | grep LISTEN | awk '{print $4}' | cut -d: -f2)

   echo "Ports: $PORTS"
   echo "----------------------------------------"
done

执行结果:

结论:有的jar程序无法显示出对应的端口

脚本2:

#!/bin/bash

# 执行 jps 命令获取进程信息
jps_output=$(jps -l)

# 提取 PID 和进程名
IFS=$'\n'
for line in $jps_output; do
    pid=$(echo $line | awk '{print $1}')
    process_name=$(echo $line | awk '{print $2}')
    # 使用 netstat 查找 PID 对应的端口
    ports=$(sudo netstat -nlp | awk '$7 ~ /'$pid'/{print $4}' | awk -F ':' '{print $NF}')
    echo "PID: $pid, Process: $process_name, Ports: $ports"
done

执行结果:

结论:无法显示对应端口

脚本3:

#!/bin/bash

# 检查jps和netstat命令是否存在
if ! command -v jps &> /dev/null; then
    echo "jps 命令未找到,请确保Java已安装。"
    exit 1
fi

if ! command -v netstat &> /dev/null; then
    echo "netstat 命令未找到,请确保net-tools已安装。"
    exit 1
fi

# 获取所有Java进程的PID和命令行参数
java_processes=$(jps -l)

# 检查jps命令是否成功执行
if [ $? -ne 0 ]; then
    echo "jps 命令执行失败。"
    exit 1
fi

echo "Java进程的PID和命令行参数:"
echo "$java_processes"

# 定义一个函数来查找进程的端口
find_ports_for_pid() {
    local pid=$1
    # 使用netstat和grep查找PID对应的端口
    netstat -tulnp | grep "$pid" | awk '{print $4}'
}

# 遍历所有Java进程
for process in $java_processes; do
    # 提取PID
    pid=$(echo $process | cut -d ' ' -f 1)

    # 打印PID
    echo "查找 PID: $pid 对应的端口..."
    
    # 查找端口
    find_ports_for_pid "$pid"

    # 打印分隔线
    echo "----------"
done

执行结果:

结论:端口没有并排显示,不方便统计

脚本F:

#!/bin/bash

# 执行 jps 命令获取进程信息
jps_output=$(jps -l)

# 提取 PID 和进程名
IFS=$'\n'
for line in $jps_output; do
    pid=$(echo $line | awk '{print $1}')
    process_name=$(echo $line | awk '{print $2}')
    # 使用 netstat 查找 PID 对应的端口
    ports=$(sudo netstat -nlp | awk '$7 ~ /'$pid'/{print $4}' | awk -F ':' '{print $NF}')
    ports_array=($ports)
    ports_str=""
    for port in "${ports_array[@]}"; do
        if [ -n "$ports_str" ]; then
            ports_str="$ports_str,"
        fi
        ports_str="$ports_str$port"
    done
    echo "PID: $pid, Process: $process_name, Ports: $ports_str"
done

执行结果:

结论:完美!

2.0版本:
1.0版本所有步骤,也就是整个需求又自动化工具ansible一键完成。
写一个在ansible上执行的脚本yaml文件

- name: 项目名
  hosts: 项目hosts
  user: 普通用户
  vars_files:
    - "secrets.yml"
  vars:
    ansible_ssh_pass: "{{ lookup('vars', 'dms_password') }}"
    ansible_become_pass: "{{ lookup('vars', 'dms_password') }}"
  tasks:
   - name: Gather filtered TCP ports
     become: yes
     become_user: root
     become_method: sudo
     shell: "netstat -tlnp | grep LISTEN | awk '{print $4}' | cut -d: -f2 | grep -Ev '22|25|53|443|631|9100|10050'"
     register: filtered_ports

   - name: Display filtered TCP ports
     become: yes
     become_user: root
     become_method: sudo
     debug:
       var: filtered_ports.stdout_lines

   - name: Check if jps shell is available
     become: yes
     become_user: root
     become_method: sudo
     shell: "which jps"
     register: jps_check
     failed_when: false

   - name: Gather Java process information
     become: yes
     become_user: root
     become_method: sudo
     shell: "jps -l"
     register: jps_output
     when: jps_check.stdout | length > 0

   - name: Display Java process information
     become: yes
     become_user: root
     become_method: sudo
     debug:
       var: jps_output.stdout_lines
     when: jps_check.stdout | length > 0

   - name: Gather ports for Java processes
     become: yes
     become_user: root
     become_method: sudo
     shell: "lsof -a -p {{ item }} -i -n | grep LISTEN | awk '{print $9}' | cut -d: -f2"
     loop: "{{ jps_output.stdout_lines | map('regex_replace', '^(.*) (.*)$', '\\1') | list }}"
     register: java_process_ports
     when: jps_check.stdout | length > 0

   - name: Display ports for Java processes
     become: yes
     become_user: root
     become_method: sudo
     debug:
       var: java_process_ports.results | map(attribute='stdout_lines') | list
     when: jps_check.stdout | length > 0


执行结果:

这里只能展示最后的结果,没有报错和失败的,上面的输出信息涉及公司隐私

标签:服务器端,运维,端口,PID,手册,become,jps,echo,ports
From: https://www.cnblogs.com/zhoutuo/p/18352599

相关文章

  • 运维 + AI,你得先搞懂这些
    很感谢夜莺提供如此优质的平台能和行业内顶尖技术大佬做面对面的交流,在这个会议中又学习到了很多有趣有深度的内容,给我在未来探索的道路上提供了一些新的指引方向。同时感谢夜莺社区的邀请,在此再做一次关于AI方面的交流文章,由于目前我也是在AI这条赛道上的探索者,如果有不专业的地......
  • NVMe主机控制器,AMBA-AXI4-Stream接口,Xilinx FPGA,介绍手册
    NVMeA4SHostControllerIP1     介绍NVMeA4SHostControllerIP可以连接高速存储PCIeSSD,无需CPU和外部存储器,自动加速处理所有的NVMe协议命令,具备独立的数据写入AXI4-Stream/FIFO接口和数据读取AXI4-Stream/FIFO接口,适合于高性能、顺序访问的应用,比如视频记录、信号......
  • NVMe主机控制器,AMBA-AXI4接口,Xilinx FPGA,介绍手册
    NVMeAXI4HostControllerIP1     介绍NVMeAXI4HostControllerIP可以连接高速存储PCIeSSD,无需CPU,自动加速处理所有的NVMe协议命令,具备独立的数据写入和读取AXI4接口,不但适用高性能、顺序访问的应用,也适用于随机访问的应用,同时结合外部存储器(比如DDR),使得Host端的数......
  • 一二三物联网智慧工厂运维管理平台
    智慧工厂运维管理平台是一种基于信息技术和物联网技术的管理平台,主要用于智能制造领域中的设备管理、生产管理和质量管理。该平台能够实现对工厂生产过程中的各种设备、生产线、生产计划、生产数据、质量数据等信息的实时监测、预测、维护和管理,以提高生产效率和降低生产成本。......
  • 《Kubernetes企业级云原生运维实战》(李振良).pdf
    本书是一本实用性很强的Kubernetes运维实战指南,旨在为容器云平台的建设、应用和运维过程提供全面的指导。作者结合丰富的生产环境经验,深入探讨作为一名Kubernetes工程师必备的核心技能,包括部署、存储、网络、安全、日志、监控、CI/CD等方面的技术。本书结合大量的实际案例,......
  • ArcGIS API for JavaScript 3.x 到 4.x 的升级手册
    众所周知,3.x版本主要是构建二维地图,且基本不会再添加新功能;而4.x版本主要是构建于三维地图,与3.x相比并不是简单的升级,基本上就是重写了。所以当我们需要把API从3.x升级到4.x时,应用程序基本上是需要重写的,这里将对API升级过程中涉及到的相关变动进行记录与描述。以下......
  • 超全能,MobaXterm远程工具,网工、运维这样用就对了
    号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部上午好,我的网工朋友。远程访问和管理服务器的能力对于开发人员、系统管理员乃至普通用户来说都变得越来越重要。随着云计算和分布式系统的普及,能够高效、安全地进行远程操作已经成为一项必备技能......
  • 云图说|一图告诉你主机安全的运维效率如何提升超出预期
    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。摘要: 华为云主机安全服务7月新版本上线啦!本次新增月度运营报告、病毒查杀按次购买、容器审计以及容......
  • 区块链的搭建和运维4
    区块链的搭建和运维4(1)搭建基于MySQL分布式存储的区块链1.构建单群组网络节点使用开发部署工具构建单群组网络节点,命令如下:bashbuild_chain.sh-l127.0.0.1:4-p30300,20200,85452.启动MySQL并设置账户密码输入如下命令,启动MySQL服务,右下角出现[OK]字样......
  • 【运维自动化-配置平台】如何使用云资源同步功能(腾讯云为例)
    云资源同步是通过apikey去单向同步云上的主机资源和云区域信息,目前支持腾讯云和亚马逊云。主要特性1、蓝鲸配置平台周期性的单向只读同步云主机和vpc(对应蓝鲸云区域)信息,第一次全量,后面增量2、默认同步到主机池,也可自定义主机池模块,需要手动分配到业务3、主机随云控制台销毁而......