目录

ansible环境部署

控制端准备

被控制端准备

ansible批量管理主机的方式主要有两种

配置准备:

ssh密码认证方式管理机器

密码登录,需要各主机密码相同

配置免密登录

ssh密钥方式批量管理主机

ansible实现批量化主机管理的模式

ansible-doc命令

command模块

shell模块

script模块

copy模块

yum_repository模块

yum模块

systemd模块

group模块

user模块

date命令:

File模块

cron模块

debug模块

template模块

lineinfile模块

PlayBook

YMAL

Play

ansible变量

全局变量

剧本变量

资产变量

Facts变量

注册变量

变量优先级

任务控制

条件

循环

tags属性

handlers属性:

JinJa2模板

介绍:Jinja2是基于Python书写的模板引擎。

命名:1.jinja2 文件以 .j2 为后缀,也可以不写后缀,

定界符:

判断控制:

循环控制(不可使用break,countinue):

Role

循环方法创建main.yml

role执行:

Galaxy平台

实战:

优化ansible执行速度

1.ssh长连接:

2.开启pipelining:

3.Facts缓存到redis:

自由执行策略

异步执行

插件

回调插件

主输出插件

启用其他内置的回调插件

回调类型

日志回调插件

开发回调插件


ansible基于python编写,主要由python的两个ssh处理模块,paramiko以及pyYAML模块。

ansible环境部署

控制端准备

可使用yum安装方式

yum -y install epel-release # 安装扩展源

yum install -y ansible libselinux-python #安装ansible及其所需的系统模块

被控制端准备

yum -y install epel-release # 安装扩展源

yum install -y libselinux-python #安装ansible所需的系统模块

ansible批量管理主机的方式主要有两种

传统的输入ssh密码验证,密钥管理

配置准备:

配置好ansible的配置文件,添加被管理机器的ip地址,或者主机名

1.备份现有的配置文件

cp /etc/ansible/hosts{,.ori} # 将hosts文件复制到hosts.ori文件中

2.添加ansible需要管理的机器地址

vim /etc/ansible/hosts

添加内容

[主机列表模块]

被控制主机的IP

注意:多台网络号相同的主机可以使用X.X.X.[S:E]格式

ssh密码认证方式管理机器
密码登录,需要各主机密码相同

ansible是直接利用linux本地的ssh服务,以及一些远程操作,一般情况下客户端的ssh服务默认开启,无须额外管理

1, 查看ssh是否开启(一般默认开启)

systemctl status sshd

2, 在控制端主机上,告诉其他被管理的机器,你要执行什么命令,以及那些用户去执行

ansible 主机列表模块 -m 功能 -a “命令” -k -u 用户

注意:①,主机列表模块不加[]

②,当使用all时,所有主机列表模块被选中

③,当使用多模块时用‘’括起来,模块之间:

并集 :

交集 :&

差集 :!

④,如果不想使用默认的库存文件位置(通常是/etc/ansible/hosts),可以在/etc/ansible/ansible.cfg中修改,

在使用ansible时可以通过-i指定自定义的库存文件路径(资产)

常用参数

-m 指定功能模块,默认就是command,command模块它用于在远程主机上执行命令,除了command模块,还有ping等模块。

-a 告诉模块需要执行的参数

-k 询问密码验证

-u 指定运行的用户

-i指定自定义的库存文件路径

3,如上操作,一般默认情况下会有错误提示,需要执行手动ssh对主机进行连接,及可使用ansible命令操作了

# 远程连接例如

ssh root@192.168.47.132

# 可查看

cat ~/.ssh/know_hosts

4,此时可以再次执行ansible命令

配置免密登录

当主机密码不同时,可以使用免密登录

    在/etc/ansible/hosts文件中,定义好密码即可,即可实现快速的认证和远程管理主机

1, 修改hosts文件·

[主机列表模块]

被控制主机的ip ansible_user=用户名 ansible_ssh_pass=密码

参数

# absible_host 主机地址

# ansible_port 端口,默认是22

# ansible_user 认证的用户

# ansible_ssh_pass 用户认证的密码

2,此时可以不需要输入密码,既可以自动ssh验证通过了

     ansible   主机列表模块   -m  功能   -a  “命令”
ssh密钥方式批量管理主机

这种方式比配置host文件的密码参数更安全

1.在控制机上创建ssh密钥对

ssh-keygen  -f   ~/.ssh/id\_rsa   -P "" >/dev/null  2>&1

参数

# f :用于指定生成的密钥对文件的文件名

# P :用于指定密钥对的密码(口令)。这里设置为空字符串(“”),意味着生成的密钥对在使用时不需要输入密码就能被访问和使用

# &1:表示将标准错误输出重定向到和标准输出相同的地方(也就是/dev/null)

2.此时到“cd ~/.ssh/”下检查公私钥文件:id_rsa id_ras.pub

3.编写公钥分发脚本

#!/bin/bash

rm -rf ~/.ssh/id_ras*

ssh-keygen -f ~/.ssh/id_rsa -P “” >/dev/null 2>&1

SSH_Pass=密码

Key_Path=~/.ssh/id_rsa.pub

for ip in 132 133 # 这里的132,133是我的管理主机的最后主机号

do

# 非交互式分发公钥命令需要用sshpass指定SSH密码,通过-o StrictHostKeyChecking=no跳过SSH连接确认信息

       sshpass    -p$SSH\_Pass    ssh-copy-id   -i    $Key\_Path    "-o   StrictHostKeyChecking=no"        192.168.47.$ip

done

4.运行脚本,使用ansible工具

ansible实现批量化主机管理的模式

主要有两种:

利用ansible的纯命令行实现的批量管理,ad-hoc模式——好比简单的shell命令管理

利用ansible的playbook剧本来实现批量管理,playbook剧本模式——好比复杂的shell脚本

Ad-hoc模式

ansible的ad-hoc模式是ansible的命令行形式,处理一些临时的,简单的任务,可以直接使用ansible的命令行来操作

playbook模式

ansible地playbook莫事是针对比较具体,且比较大的任务,需要写好剧本来实现,比如一键部署rsync备份服务器,lnmp环境。

ansible-doc命令

列出所有的ansible-hoc支持的模块

ansible-doc -l

查看某个模块的具体的用法参数

ansible-doc -s command

command模块

作用:在远程节点上执行一个命令

ansible-doc -s command # 查看该模块支持的参数

常用参数:

chdir:在执行命令之前,通过cd进入该参数指定的目录

creates:在创建一个文件之前,判断该文件是否存在,如果存在了则跳过前面的东西,如果不存在则执行前面的动作

free_form:该参数可以输入任何的系统命令,实现远程执行和管理

removes:定义了一个文件是否存在,如果存在则执行前面的动作,如果不存在则跳过动作

warn:是否提供告警信息

注意:

command模块是ansible的默认基本模块,可以省略不写,使用command模块,不得出现shell变量$name,也不得出现特殊符号>< | ; &这些符号command模块都不认识,如果需要使用特殊符号,可以使用shell模块。

shell模块

作用:在远程机器上执行复杂的命令

ansible-doc -s shell # 查看该模块支持的参数

注意:语句之间用;进行分割

script模块

功能:将控制端的脚本远程传输到被控制主机上运行

对比shell模块。script模块功能更强大

ansible-doc -s script # 查看该模块支持的参数

注意:直接传送脚本名即可

copy模块

功能:主要用于管理节点和被管理节点之间的文件拷贝

常用参数:

src 指定拷贝文件的源地址

dest 指定拷贝文件的目的地址

backup 拷贝文件前,若被控制主机源文件发生变化,则对目标文件进行备份

woner 指定新拷贝文件的所有者

group 指定新拷贝文件的所有组

mode 指定新拷贝文件的权限

yum_repository模块

功能:添加yum库

常用参数:

name 仓库名称,就是仓库文件中的第一行的中括号中名称,必须的参数

description 自定义仓库描述信息,必须的参数

baseurl yum存储库‘repodata’目录所在目录的url,必须的参数,它可以是多个url的列表

file 仓库文件保存到被控制主机的文件名,不包含.repo。默认是name的值

state preset确认添加仓库文件,absent确认删除仓库文件

gpgcheck 是否检查gpg yes|no ,没有默认值,使用/etc/yum.conf进行配置

yum模块

等同于Linux上的yum命令,对远程服务器上的rpm包进行管理。

常用参数:

name 要安装的软件包名,多个软件包以逗号隔开

state 对当前指定的软件安装,移除操作(present installed latest absent removed)

     支持的参数

present 确认已经安装,但不升级

installed 确认已经安装

latest 确保安装,且升级为最新

absent 和removed 确认已移除

安装软件包组

ansible 列表主机模块 -m yum -a ”name=‘@Development tools’ state=present“

注意:@Development tools是要安装的软件包组的名称。在基于 RPM 的 Linux 系统中,软件包可以分组,Development tools是一个包含了许多开发相关工具(如编译器、调试工具等)的软件包组。

systemd模块

功能:管理远程主机上的systemd服务,就是由systend所管理的服务

常用参数:

daemon_reload 重新载入systemd,扫描新的/变动的单元

enabled 是否开机自启动yes|no

name 必选项,服务名称,比如httpd vsftpd

state 对当前服务执行启动,停止,重启,重新加载等操作(started,stopped,restarted,reloaded)

group模块

功能:对被控制主机进行组的管理

常用参数:

name 组名称,必选项

system 是否为系统组,yes|no,默认为no

state 删除或者创建,present/absent,默认是present

user模块

功能:用于管理被管理结点上的用户

常用参数:

name:必选项,指定用户名

password:设置用户密码,接受的是一个加密的值,会直接存到shadow,默认不设置密码

update_password:更新密码

home:指定用户家目录

shell:设置用户的shell

comment:用户的描述信息

create_home:在创建用户时,是否创建其家目录,默认创建,不创建设置为no

group:设置用户的主组

groups:将用户加入到其他组,逗号分开,默认会把用户从原组删除

append:与groups配合使用,yes时,不会将用户从原组删除

system:设置为yes时,将会创建一个系统账号

expires:设置用户的过期时间,值为时间戳,会转为天数后放在shadow的最后第8个字段里

generate_ssh_key:设置为yes将会为用户生成密钥。不会覆盖原来密钥

ssh_key_type:指定用户的密钥类型,默认为rsa,具体的类型取决于被管理结点

state:删除或添加用户,yes为添加,absent为删除,默认为yes

remove:当与state=absent一起使用,删除一个用户及关联目录,可选值为yes/no

date命令:

// 计算 3 小时之后是几点几分

# date +%T -d ‘3 hours’

//任意日期的前 N天,后 N 天的具体日期

# date +%F -d"20190910 1 day"

# date +%F -d"20190910 -1 day

//计算两个日期相差天数,比如计算生日距离现在还有多少天

# d1=$(date +%s -d 20180728)

#d2=$(date +%s -d 20180726)

#echo s(((d1-d2)/86400))

File模块

功能:用于远程主机上的文件操作

常用参数:

owner:定义文件/目录的属主

group:定义文件/目录的属组

mode:定义文件/目录的权限

path:必选项,定义文件/目录的路径

recurse:递归的设置文件的属性,只对目录有效

src:链接(软/硬)文件的源文件路径,只应用于state=link的情况

dest:链接文件的路径,只应用于state=link的情况

state:

directory:如果目录不存在,创建目录

file:文件不存在,则不会被创建,存在则返回文件的信息,常用于检查文件是否存在。

link:创建软连接

hard:创建硬连接

touch:文件不存在,则会创建一个新的文件,文件或目录存在,则更新其最后修改时间

absent:删除目录,文件或者取消链接文件

cron模块

功能:管理远程节点的cron服务,等同于Linux中的计划任务

注意:使用Ansible创建的计划任务,是不可使用本地的crontab -e去编辑,否则Ansible无法再次操作次计划任务

常用参数:

name:指定一个cron job名字,便于删除

minute:指定分钟,可以设置(0-59,*,*/2等),默认是*。表示每分钟。

hour:每小时。可设置(0-23,*,*/2等),默认是*,表示每天。

month:指定月份,可设置(1-12,*,*/2等),默认是*,每周

weekday:指定月份,可设置(0-6 for Sunday-Saturday,*等),默认*,每星期

job:指定要执行的内容,通常可以写脚本或内容。

state:指定job状态,新增present/删除absent,默认present。

验证cron:

crontab -l

debug模块

功能:debug模块主要用于调试时使用,通常的作用是将一个变量的值给打印出来

常用参数:

var:直接打印一个指定的变量值,变量不用加双引号。

msg:打印一段可以格式化的字符串

template模块

功能:加强版copy,可以进行文档内变量的替换

常用参数:

src:指定ansible控制端的文件路径

dest:指定ansible被控端的文件路径

owner:指定文件属主

group:指定文件属组

mode:指定文件的权限

backup:创建一个包含时间戳信息的备份文件,yes/no

lineinfile模块

功能:在被管理节点上,用正则匹配对目标文件的一行内容修改删除等操作

常用参数:

path:目标文件路径,必须项。

state:可选值absent删除|present替换(默认值)

regexp:在文件的每一行查找的正则表达式,对于state=present,仅找到的最后一行被替换

line:要在文件中插入/替换的行,需要state=present

create:文件不存在时,是否要创建文件并添加内容,yes/no。

# ansible all -m lineinfile -a ‘path=/etc/selinux/config regexp=“^SELINUX=” line=“SELINUX=disabled” state=present’

PlayBook

YMAL

PlayBook遵循YAML的语法格式。

yaml特点

Yaml 文件以 # 为注释符

Yaml 文件以 .yml 或者 .yaml结尾

Yaml 文件以 — 开始,以 …结束,开始和结束标志都是可选的

yaml基本语法

区分大小写

使用缩进表示层级关系

缩进时,使用tab键或者空格键一定要达到统一

相同层级的元素必须左侧对齐即可

yaml支持的数据结构有三种

字符串 YAML中的字符串可以不使用引号,语句为表述完可进行折行

列表 格式 ‘以短横线开头+空格+具体的值’,一个短横线是一个列表元素

字典 格式:‘key+冒号(:)+空格+值(value),即key:value’

yaml语法测试

python3 -c ‘import yaml,sys;print(yaml.safe_load(sys.stdin))’ < yml文件

Play

定义Play

每个Play都是以短横杠开始的

每个Play都是一个YAML字典格式

常用属性

name: 每个play的名字

hosts: 每个play涉及的被管理服务器,同ad-hoc中的资产选择器

tasks: 每个play中具体要完成的任务,以列表的形式表达

become:如果需要提权,则加上become相关属性

becom_user: 若提权的话,提权到哪个用户上

remote_user: 在远程服务器上执行具体操作的用户。若不指定,则默认使用当前执行ansible Playbook的用户

一个完整的playbook

对Playbook进行语法校验

下面校验的方法,只能校验PlayBook是否正确,而不能校验YAML文件是否语法正确

ansible-playbook playbook文件名 --syntax-check

可以安装yamllint进行校验YAML语法

pip3 install yamllint

yamlint 文件名

运行PlayBook

ansible-playbook playbook文件名

单步跟从调试PlayBook

//执行task中的任务,需要手动确认是否往下执行

ansible-playbook playbook文件名 --step

测试运行PlayBook

会在本机上模拟执行所有过程

ansible-playbook playbook文件名 -C

ansible变量

在ansible中,使用双花括号 {{ }} 来引用变量

全局变量

通过命令行参数,使用-e参数在执行ansible命令时传递全局变量

剧本变量

通过play属性vars/vars_files定义

在play使用{{变量名}}引用变量,当为字典中的vlaue值时需要加上双引号(与字典进行区分)。

资产变量

主机变量和主机组变量

主机变量优先级高于主机组变量

Facts变量

它的声明和赋值完全由ansible中的setup模块帮助我们完成,收集了有关被管理服务器的操作系统版本,服务器IP地址,主机名,磁盘的使用情况,

cpu个数,内存大小等有关被管理服务器的私有信息。

语法:ansible 主机列表 -m setup

可以通过Facts模块中的filter参数去过滤我们想要的信息。

例如过滤内存信息

在PlayBook运行的时候都会发现在PlayBook执行前都会有一个Gathering Facts的过程,这个过程就是收集被管理服务器的Facts信息过程。

例如获取地址

注意:获取Facts信息时,需要先获取最外层一般以ansible开头,内部值引用若为列表则".下标",字典则“.key”

若在整个PlayBook的执行过程中,完全未使用过Facts变量,此时可以将其关闭以加快PlayBook的执行速度。

关闭facts变量收集功能

gather_facts: no

注册变量

将此次task任务的结果作为条件,去判断是否去执行其他task任务;

注册变量在PlayBook中通过register关键字去实现。

变量优先级

全局变量>剧本变量>资产变量

任务控制

条件

用when实现条件判断

when支持如下运算符:

==,!=,>/<,>=/<=,is defined,is not defined,true,flase,and,or

循环

在PlayBook中使用with_items/loop去实现循环控制,且循环时的中间变量(shell循环中的$i变量)只能是关键字item(每次循环的值由item接受),不能随意自定义。

tags属性

解决的问题:对某些具体的任务执行,而不用执行整个PlayBook剧本,降低变更风险和范围

使用:

在playbook具体任务下一定要指定tags属性,这样在执行的过程中只执行task任务上打上tags标记的任务

执行语法:ansible-playbook 剧本名 -t tags标记名

handlers属性:

解决问题:与notify配合使用,当某任务发生改变,通过notify通知去触发handlers(与tasks平级)下的任务。

JinJa2模板

介绍:Jinja2是基于Python书写的模板引擎。

命名:1.jinja2 文件以 .j2 为后缀,也可以不写后缀,

定界符:

注释: {# 注释内容 #}

变量引用: {{ var }}

逻辑表达: {% %}

判断控制:

{%if%}

{%else if%}

{%end if%}

循环控制(不可使用break,countinue):

{%for ….in…%}

{%end for%}

Role

role就是一个目录,将一个PlayBook拆分成不同子目录,目录名就是role名,role下会有子目录,每个子目录包含一个‘main.yml’文件,

循环方法创建main.yml

for d in `ls` ; do ; touch ${d}/main.yml ; done

这个文件应该包含以下名称对应的内容:

tasks -包含角色要执行的任务的主要列表

handlers-包含处理程序,此角色甚至该角色之外的任何地方都可以使用这些处理程序。

defaults-角色的默认变量。

vars-角色的其他变量,

files -包含可以通过此角色部署的文件

templates -包含可以通过此角色部署的模板。

meta -为此角色定义一些元数据

角色必须至少包含这些目录之一,但是最好排除任何未使用的目录

role执行:

role 本身不能被直接执行,需要借助playBook进行间接的调用。

  • name: a playbook used role

    hosts: all
    
    roles :
    
       - 角色名
    

Galaxy平台

功能:获取需要的role。https://galaxy.ansible.com/

常用指令

//在galaxy 上搜索共享的ROLE

# ansible-galaxy search 名称

//安装 galaxy 上共享的 ROLE

# ansible-galaxy install 名称

//列举已经通过 ansible-galaxy 工具安装的ROLE#

ansible-galaxy list

//创建一个ROLE 的空目录架构,这样我们在开发一个ROLE的时候,就不需要手动创建目录了。

# ansible-galaxy init --offline

实战:

优化ansible执行速度

1.ssh长连接:

进/etc/ansible/ansible.cfg修改ControlPersist时间,使用ss -natp | grep -E 'ESTAB.*ssh’查看连接情况

2.开启pipelining:

进/etc/ansible/ansible.cfg修改pipelining = True,执行剧本时-vvv发现无put操作

3.Facts缓存到redis:

安装redis,安装 Redis Python 客户端pip install redis

进/etc/ansible/ansible.cfg

修改收集类型gathering = smart(缓存后不再收集),

设置缓存后端为 fact_caching = redis,

修改fact_caching_connection= 服务器ip:6379:0(参考注释修改),

fact_caching_timeout=缓存过期时间

进/etc/redis.conf中bind=0.0.0.0(允许所有 IP 访问),重启redis

自由执行策略

允许 Ansible 同时在所有目标主机上独立执行任务(并行)。每台主机完成一个任务后,会立即开始执行下一个任务,而不必等待其他主机完成当前任务。

适用场景:适用于任务之间相互独立,且希望尽快完成所有主机上任务的场景,例如批量安装软件包。运行时,加-f 选项用于控制并行执行的进程数量

配置:进入ansible.cfg修改strategy = free

异步执行

当执行耗时较长的任务时,无需等待任务完成,ansible可以继续处理其他事务。

参数:

async:用于指定任务的最大执行时间(以秒为单位)。如果任务在这个时间内没有完成,ansible 会将其标记为失败。

poll:用于指定 ansible 检查任务状态的间隔时间(以秒为单位)。如果设置为 0,表示不主动检查任务状态,而是让任务在后台异步运行,之后可以通过 async_status 模块手动检查任务状态

插件

回调插件

查看回调插件:ansible-doc -t callback -l

查看json回调插件:ansible-doc -t callback json

主输出插件

同时只能有一个回调插件作为主输出插件,如果想替换,在 ansible.cfg 中配置 stdout 插件(标准输出)。

stdout_callback = json #以JSON的格式输出结果,也可其他

或使用自定义的回调 stdout_callback = mycallback

默认情况下仅对playbook生效,若让ad-hoc方式生效在ansible.cfg种修改bin_ansible_callbacks = True

启用其他内置的回调插件

大部分情况下,无论是内置的回调插件还是自定义的回调插件,都需要在ansible.cfg 中添加到白名单中,才能启用。

callback_whitelist=timer,mail,profile roles,custom callback

timer :计算整个 playbook 的运行时间

mail: 实现发送邮件的功能

profile_roles :统计任务执行时间

custom callback是自定义的插件

注意:profiles_roles总时间超过timer总时间可能是由于并行机制的影响,profile_roles中时间是任务的时间累加,而实际执行会并行。

回调类型

不同的回调类型对于 playbook 的输出有不一样的效果

stdout 标准输出类型,用在回调的主管理者

aggregate聚合类型,把此类型插件处理的结果和stdout 类型插件合并一起输出到标准输出。比如:timer,profile_tasks 等。

notification 通知类型,不参与标准输出,也不影响标准输出插件的正常输出,只是会把执行 playbook的返回值写的指定的媒介中。

比如:log_plays,mail。假如自定义把执行playbook 的结果输出到数据库中就可以使用此类型。

日志回调插件

内置的回调查看log_plays会将playbook的返回信息到默认路径/var/log/ansible/hosts目录中。

以下方法可通过ansible-doc -t callback log_plays进行查看

方法1:使用系统变量指定日志路径 export ANSIBLE_LOG_FOLDER=日志存储路径,并加入白名单

方法2:在ansible.cfg中进行配置,并加入白名单

[callback_log_plays]

log_folder = 日志存储路径

查看文档:

开发回调插件

规则

1,使用兼容的python版本进行编写

2,遇到问题,主动抛出异常

3,返回以unicode编码的字符串,主要是兼容JinJa2

4,符合ansible的配置和文档标准,可以通过ansible.cfg进行配置

开发mysql_plays插件

数据库准备:

create database if not exists ansible default charset utf8mb4 collate utf8mb4_general_ci;

create user ‘ansible’@‘%’ identified with mysql_native_password by ‘Aa!123456’;

grant all on ansible.* to ‘ansible’@‘%’;

mysql> create table if not exists playsresult(

-> id int auto\_increment primary key,

-> user varchar(16) not null,

-> host varchar(32) not null,

-> category varchar(11) not null,

-> result text,

-> create\_time datetime not null default current\_timestamp

-> );

log_plays文档改写:

1.获取文档:按上述日志回调插件查看文档方法获取文档

2.进行改写,改option选项,通过异常判断pymsql还是MySQL库,定义mysql连接函数,定义execute_sql函数

3.改写完成保存到/root/.ansible/plugins/callback/目录下

ansible.cfg配置:

将插件写入白名单,并将ini写入

验证:

ansible-doc -t callback mysql_plays

这两年,IT行业面临经济周期波动与AI产业结构调整的双重压力,确实有很多运维与网络工程师因企业缩编或技术迭代而暂时失业。

很多人都在提运维网工失业后就只能去跑滴滴送外卖了,但我想分享的是,对于运维人员来说,即便失业以后仍然有很多副业可以尝试。

运维副业方向

运维,千万不要再错过这些副业机会!

第一个是知识付费类副业:输出经验打造个人IP

在线教育平台讲师

操作路径:在慕课网、极客时间等平台开设《CCNA实战》《Linux运维从入门到精通》等课程,或与培训机构合作录制专题课。
收益模式:课程销售分成、企业内训。

技术博客与公众号运营

操作路径:撰写网络协议解析、故障排查案例、设备评测等深度文章,通过公众号广告、付费专栏及企业合作变现。
收益关键:每周更新2-3篇原创,结合SEO优化与社群运营。

第二个是技术类副业:深耕专业领域变现

企业网络设备配置与优化服务

操作路径:为中小型企业提供路由器、交换机、防火墙等设备的配置调试、性能优化及故障排查服务。可通过本地IT服务公司合作或自建线上接单平台获客。
收益模式:按项目收费或签订年度维护合同。

远程IT基础设施代维

操作路径:通过承接服务器监控、日志分析、备份恢复等远程代维任务。适合熟悉Zabbix、ELK等技术栈的工程师。
收益模式:按工时计费或包月服务。

网络安全顾问与渗透测试

操作路径:利用OWASP Top 10漏洞分析、Nmap/BurpSuite等工具,为企业提供漏洞扫描、渗透测试及安全加固方案。需考取CISP等认证提升资质。
收益模式:单次渗透测试报告收费;长期安全顾问年费。

比如不久前跟我一起聊天的一个粉丝,他自己之前是大四实习的时候做的运维,发现运维7*24小时待命受不了,就准备转网安,学了差不多2个月,然后开始挖漏洞,光是补天的漏洞奖励也有个四五千,他说自己每个月的房租和饭钱就够了。

在这里插入图片描述

为什么我会推荐你网安是运维人员的绝佳副业&转型方向?

1.你的经验是巨大优势: 你比任何人都懂系统、网络和架构。漏洞挖掘、内网渗透、应急响应,这些核心安全能力本质上是“攻击视角下的运维”。你的运维背景不是从零开始,而是降维打击。

2.越老越吃香,规避年龄危机: 安全行业极度依赖经验。你的排查思路、风险意识和对复杂系统的理解能力,会随着项目积累而愈发珍贵,真正做到“姜还是老的辣”。

3.职业选择极其灵活: 你可以加入企业成为安全专家,可以兼职“挖洞“获取丰厚奖金,甚至可以成为自由顾问。这种多样性为你提供了前所未有的抗风险能力。

4.市场需求爆发,前景广阔: 在国家级政策的推动下,从一线城市到二三线地区,安全人才缺口正在急剧扩大。现在布局,正是抢占未来先机的黄金时刻。

在这里插入图片描述

运维转行学习路线

在这里插入图片描述

(一)第一阶段:网络安全筑基

1. 阶段目标

你已经有运维经验了,所以操作系统、网络协议这些你不是零基础。但要学安全,得重新过一遍——只不过这次我们是带着“安全视角”去学。

2. 学习内容

**操作系统强化:**你需要重点学习 Windows、Linux 操作系统安全配置,对比运维工作中常规配置与安全配置的差异,深化系统安全认知(比如说日志审计配置,为应急响应日志分析打基础)。

**网络协议深化:**结合过往网络协议应用经验,聚焦 TCP/IP 协议簇中的安全漏洞及防护机制,如 ARP 欺骗、TCP 三次握手漏洞等(为 SRC 漏扫中协议层漏洞识别铺垫)。

**Web 与数据库基础:**补充 Web 架构、HTTP 协议及 MySQL、SQL Server 等数据库安全相关知识,了解 Web 应用与数据库在网安中的作用。

**编程语言入门:**学习 Python 基础语法,掌握简单脚本编写,为后续 SRC 漏扫自动化脚本开发及应急响应工具使用打基础。

**工具实战:**集中训练抓包工具(Wireshark)、渗透测试工具(Nmap)、漏洞扫描工具(Nessus 基础版)的使用,结合模拟场景练习工具应用(掌握基础扫描逻辑,为 SRC 漏扫工具进阶做准备)。

(二)第二阶段:漏洞挖掘与 SRC 漏扫实战

1. 阶段目标

这阶段是真正开始“动手”了。信息收集、漏洞分析、工具联动,一样不能少。

熟练运用漏洞挖掘及 SRC 漏扫工具,具备独立挖掘常见漏洞及 SRC 平台漏扫实战能力,尝试通过 SRC 挖洞搞钱,不管是低危漏洞还是高危漏洞,先挖到一个。

2. 学习内容

信息收集实战:结合运维中对网络拓扑、设备信息的了解,强化基本信息收集、网络空间搜索引擎(Shodan、ZoomEye)、域名及端口信息收集技巧,针对企业级网络场景开展信息收集练习(为 SRC 漏扫目标筛选提供支撑)。

漏洞原理与分析:深入学习 SQL 注入、CSRF、文件上传等常见漏洞的原理、危害及利用方法,结合运维工作中遇到的类似问题进行关联分析(明确 SRC 漏扫重点漏洞类型)。

工具进阶与 SRC 漏扫应用:

  • 系统学习 SQLMap、BurpSuite、AWVS 等工具的高级功能,开展工具联用实战训练;

  • 专项学习 SRC 漏扫流程:包括 SRC 平台规则解读(如漏洞提交规范、奖励机制)、漏扫目标范围界定、漏扫策略制定(全量扫描 vs 定向扫描)、漏扫结果验证与复现;

  • 实战训练:使用 AWVS+BurpSuite 组合开展 SRC 平台目标漏扫,练习 “扫描 - 验证 - 漏洞报告撰写 - 平台提交” 全流程。
    SRC 实战演练:选择合适的 SRC 平台(如补天、CNVD)进行漏洞挖掘与漏扫实战,积累实战经验,尝试获取挖洞收益。

恭喜你,如果学到这里,你基本可以下班搞搞副业创收了,并且具备渗透测试工程师必备的「渗透技巧」、「溯源能力」,让你在黑客盛行的年代别背锅,工作实现升职加薪的同时也能开创副业创收!

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:全网最全的网络安全资料包需要保存下方图片,微信扫码即可前往获取!

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

(三)第三阶段:渗透测试技能学习

1. 阶段目标

全面掌握渗透测试理论与实战技能,能够独立完成渗透测试项目,编写规范的渗透测试报告,具备渗透测试工程师岗位能力,为护网红蓝对抗及应急响应提供技术支撑。

2. 学习内容

渗透测试核心理论:系统学习渗透测试流程、方法论及法律法规知识,明确渗透测试边界与规范(与红蓝对抗攻击边界要求一致)。

实战技能训练:开展漏洞扫描、漏洞利用、电商系统渗透测试、内网渗透、权限提升(Windows、Linux)、代码审计等实战训练,结合运维中熟悉的系统环境设计测试场景(强化红蓝对抗攻击端技术能力)。

工具开发实践:基于 Python 编程基础,学习渗透测试工具开发技巧,开发简单的自动化测试脚本(可拓展用于 SRC 漏扫自动化及应急响应辅助工具)。

报告编写指导:学习渗透测试报告的结构与编写规范,完成多个不同场景的渗透测试报告撰写练习(与 SRC 漏洞报告、应急响应报告撰写逻辑互通)。

(四)第四阶段:企业级安全攻防(含红蓝对抗)、应急响应

1. 阶段目标

掌握企业级安全攻防、护网红蓝对抗及应急响应核心技能,考取网安行业相关证书。

2. 学习内容

护网红蓝对抗专项:

  • 红蓝对抗基础:学习护网行动背景、红蓝对抗规则(攻击范围、禁止行为)、红蓝双方角色职责(红队:模拟攻击;蓝队:防御检测与应急处置);

  • 红队实战技能:强化内网渗透、横向移动、权限维持、免杀攻击等高级技巧,模拟护网中常见攻击场景;

  • 蓝队实战技能:学习安全设备(防火墙、IDS/IPS、WAF)联动防御配置、安全监控平台(SOC)使用、攻击行为研判与溯源方法;

  • 模拟护网演练:参与团队式红蓝对抗演练,完整体验 “攻击 - 检测 - 防御 - 处置” 全流程。
    应急响应专项:

  • 应急响应流程:学习应急响应 6 步流程(准备 - 检测 - 遏制 - 根除 - 恢复 - 总结),掌握各环节核心任务;

  • 实战技能:开展操作系统入侵响应(如病毒木马清除、异常进程终止)、数据泄露应急处置、漏洞应急修补等实战训练;

  • 工具应用:学习应急响应工具(如 Autoruns、Process Monitor、病毒分析工具)的使用,提升处置效率;

  • 案例复盘:分析真实网络安全事件应急响应案例(如勒索病毒事件),总结处置经验。
    其他企业级攻防技能:学习社工与钓鱼、CTF 夺旗赛解析等内容,结合运维中企业安全防护需求深化理解。

证书备考:针对网安行业相关证书考试内容(含红蓝对抗、应急响应考点)进行专项复习,参加模拟考试,查漏补缺。

运维转行网络攻防知识库分享

网络安全这行,不是会几个工具就能搞定的。你得有体系,懂原理,能实战。尤其是从运维转过来的,别浪费你原来的经验——你比纯新人强多了。

但也要沉得住气,别学了两天Web安全就觉得自己是黑客了。内网、域渗透、代码审计、应急响应,要学的还多着呢。

如果你真的想转,按这个路子一步步走,没问题。如果你只是好奇,我劝你再想想——这行要持续学习,挺累的,但也是真有意思。

关于如何学习网络安全,笔者也给大家整理好了全套网络安全知识库,需要的可以扫码获取!

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

1、网络安全意识
在这里插入图片描述

2、Linux操作系统
在这里插入图片描述

3、WEB架构基础与HTTP协议
在这里插入图片描述

4、Web渗透测试
在这里插入图片描述

5、渗透测试案例分享
在这里插入图片描述

6、渗透测试实战技巧
在这里插入图片描述

7、攻防对战实战
在这里插入图片描述

8、CTF之MISC实战讲解
在这里插入图片描述

关于如何学习网络安全,笔者也给大家整理好了全套网络安全知识库,需要的可以扫码获取!

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

更多推荐