首页
统计信息
友情链接
壁纸
Search
1
【更新】CommentToMail typecho2017&v4.1& Mailer三版本,支持php5.6/7,插件详解
157,743 阅读
2
CentOS 7安装bbr教程
12,533 阅读
3
纯小白10分钟变身linux建站高手?宝塔linux面板全体验
12,148 阅读
4
深信服超融合架构测试介绍
10,801 阅读
5
优秀的个人博客系统,typecho从入门到精通
7,283 阅读
技术相关
ACG相关
胡言乱语
数码杂烩
登录
Search
标签搜索
进击的巨人
漫画
宝塔
php
typecho
diy
vps
折腾
动漫
优酷路由宝
ubuntu
路由器
QQ
KMS
王忘杰
累计撰写
169
篇文章
累计收到
179
条评论
首页
栏目
技术相关
ACG相关
胡言乱语
数码杂烩
页面
统计信息
友情链接
壁纸
搜索到
137
篇与
的结果
2022-10-29
RHCE8考试模拟满分练习,轻松拿证
考试vlog{bilibili bvid="BV1rG4y1t7Kg" page=""/}上午加下午{bilibili bvid="BV1Ag41167E9" page=""/}{bilibili bvid="BV1y84y1i7ni" page=""/}
2022年10月29日
129 阅读
0 评论
3 点赞
2022-09-26
华三H3C无线AC、AP模式与上线解析
一、前言通常将AP分为胖AP(Fat AP)和瘦AP(Fit AP),其中胖AP又包含本地管理与云管理模式。AC部署方式分为旁挂和直连模式,网关部署分为AC网关和其他网关。二、AC部署方式1、最简单的部署方式,即AP直接连接到AC端口上,AC本身配置网关和VLAN,客户端以AC作为网关上网,此方式为AC网关+直连二层+瘦AP模式+集中转发 或 本地转发。2、网关不在AC上,AP与AC在同一VLAN中,客户端以AC集中转发方式上网,此方式为其他网关+直连二层+瘦AP模式+集中转发 或 本地转发。3、网关不在AC上,AP与AC不在同一VLAN中,AP通过三层Option43寻找AC,客户端以AC集中转发方式上网,此方式为其他网关+三层连接+瘦AP模式+集中转发。4、网关不在AC上,AP与AC不在同一VLAN中,AP通过三层Option43寻找AC,客户端以本地转发方式上网,客户端与AP在同一VLAN中,此方式为其他网关+三层连接+瘦AP模式+本地转发。5、网关不在AC上,AP与AC不在同一VLAN中,AP通过三层Option43寻找AC,客户端以本地转发方式上网,客户端与AP不在同一VLAN中,此方式为其他网关+三层连接+瘦AP模式+本地转发+管理业务分离。AC接口配置若AP使用集中转发,则AC接口需要配置为trunk;若AP只使用本地转发,则AC接口可以为access或三层接口。二、胖AP1、同VLAN本地管理连接AP的接口为access,本VLAN中应存在DHCP服务器,登录AP配置SSID,AP与客户端处在同一个VLAN中。2、trunk模式本地管理连接AP的接口为trunk,配置PVID为管理VLAN,管理VLAN中应存在DHCP服务器,允许其他VLAN为业务VLAN,登录AP配置SSID,AP与客户端不处于同一个VLAN中。3、云管理模式华三云简网络 https://oasis.h3c.com/与上面两种模式相同,当AP获得IP并且能够连接外网时,可以使用SN注册云简网络使用,统一配置SSID,可以自动下发配置。三、瘦AP1、同VLAN AC管理 本地转发连接AP接口为access,本VLAN中应存在DHCP服务器,AP通过广播寻找AC,上线后AP、AC、客户端在同一VLAN中。2、同VLAN AC管理 集中转发连接AP接口为access,本VLAN中应存在DHCP服务器,AP通过广播寻找AC,通过AC集中转发,上线后,AP、AC在同一VLAN,客户端在AC指定的VLAN中,集中转发最大带宽由AC决定。3、三层连接 AC管理 本地转发连接AP的接口为access,本VLAN中应存在DHCP服务器,DHCP服务器应配置Option 43选项指定AC的IP地址,AP通过路由连接AC,上线后AP与客户端在同一VLAN中。示例:假设当前AC IP为192.168.2.2/24,无线汇聚管理和业务段均为192.168.3.0/24,每个段都应配置DHCP服务。无线汇聚交换机连接AP端口为access,指定VLAN为管理业务混合段。三层上线配置,AP管理段所在VLAN配置DHCP,如:dhcp server ip-pool vlan5 gateway-list 192.168.1.1 network 192.168.1.0 mask 255.255.255.0 dns-list 114.114.114.114 option 43 hex 800700000103030303在线转换工具 https://tool.520101.com/wangluo/jinzhizhuanhuan/说明option43格式简要说明: 80 07 00 00 01 02 02 02 02 80:固定值,不用改变; 07:长度字段,其后面所跟数据的字节长度; 00 00:固定值,不用改变; 01:表示后面的IP地址的个数,此处为一个IP地址; 02 02 02 02:IP地址 AC配置缺省转发VLAN为1,本地转发为全部AP配置无线服务不设置VLAN4、三层连接 AC管理 集中转发连接AP的接口为access,本VLAN中应存在DHCP服务器,DHCP服务器应配置Option 43选项指定AC的IP地址,AP通过路由连接AC,上线后AP、AC在不同网络中,客户端在AC指定的VLAN中。5、三层连接 AC管理 管理业务分离 本地转发连接AP的接口为trunk,配置PVID为管理VLAN,管理VLAN中应存在DHCP服务器,DHCP服务器应配置Option 43选项指定AC的IP地址,AP通过路由连接AC,允许其他VLAN为业务VLAN,上线后AP、AC在不同网络中,客户端在AC指定的VLAN中,通过本地转发模式实现带宽最大化利用。示例:华三官方典型教程https://www.h3c.com/cn/d_202108/1436703_30005_0.htm(注意官方教程有一点错误,官方尚未修改)假设当前AC IP为192.168.2.2/24,无线汇聚管理段为192.168.3.0/24,无线汇聚业务段为192.168.4.0/24,每个段都应配置DHCP服务。三层上线配置,AP管理段所在VLAN配置DHCP,如:dhcp server ip-pool vlan5 gateway-list 192.168.1.1 network 192.168.1.0 mask 255.255.255.0 dns-list 114.114.114.114 option 43 hex 800700000103030303在线转换工具 https://tool.520101.com/wangluo/jinzhizhuanhuan/说明option43格式简要说明: 80 07 00 00 01 02 02 02 02 80:固定值,不用改变; 07:长度字段,其后面所跟数据的字节长度; 00 00:固定值,不用改变; 01:表示后面的IP地址的个数,此处为一个IP地址; 02 02 02 02:IP地址无线汇聚交换机连接AP端口配置为trunk,并配置缺省VLAN,此VLAN为管理VLAN,允许业务VLAN通过interface GigabitEthernet1/0/20 port link-mode bridge port link-type trunk port trunk permit vlan all port trunk pvid vlan 3AC配置简单版即缺省VLAN为1,本地转发VLAN为全部AP配置重点,加载MAP文件,即把AP接口同样改为trunk,此时允许通过的VLAN为业务VLAN,同样可以配置允许全部VLAN,以此简化配置。MAP文件内容:system-view vlan 4 quit interface GigabitEthernet 1/0/1 port link-type trunk port trunk permit vlan 4绑定无线服务时直接指定业务VLAN此时管理VLAN为交换机pvid设置的VLAN,业务VLAN为绑定无线服务时设置的VLAN。四、小结个人用户,从节约成本角度考虑,可以使用胖AP/云管理模式,无需购买AC和授权;小型企业用户可以使用同vlan集中转发模式;大型企业应使用三层连接、管理业务分离方式,更安全更快速。
2022年09月26日
264 阅读
0 评论
4 点赞
2022-09-21
Huawei华为交换机学习笔记
进入系统试图 system-view 退出 quit 返回用户视图 return Ctrl+Z 显示系统版本 display version 查看当前配置 display this 更改设备名 sysname 保存 save 重启reboot 恢复出厂设置reset saved-configuration 查看配置信息 display current-configuration 关闭“打断命令输入”undo terminal monitor 查看路由表 display ip routing-table 配置终端登录密码 user-interface console 0 authentication-mode password set authentication password simple 123 明文密码 set authentication password cipher 123 密文密码 配置终端自动退出时间 user-interface console 0 idle-timeout 1 1分钟后自动退出 关闭网络接口 interface GigabitEthernet 0/0/2 shutdown关闭 undo shutdown打开 配置IP地址 interface GigabitEthernet 0/0/0 进入接口 ip add 192.168.1.254 24 配置IP 配置交换机管理地址 interface Vlanif 1 ip add 192.168.1.253 24 undo sh 配置远程访问 user-interface vty 0 1 远程管理的终端数量 user privilege level 3 远程管理的权限级别 authentication-mode aaa 启用3A认证 aaa 进入3A认证视图 local-user admin password cipher 123 添加用户密码 local-user admin service-type telnet 远程管理的协议 {dotted startColor="#ff6c6c" endColor="#1989fa"/}清除Console口密码User interface con0 is available Please Press ENTER. Password: 断电重启,提示Ctrl+B时按Ctrl+B Boot Area ...........................................Main CPU reset type ...................................PowerOn CPU Core Frequency ...............................1400MHz SDRAM memory size ............................... 4Gbytes SDRAM initializing ..................................Done Press [Ctrl+T] to entry diag menu in 1 seconds BIOS Version:1262, Date: Mar-12-2020 09:00:00 Starting the os kernel Uncompressing... done, booting... @@@[ 3.300340] **** Total Boot time: 3300 ms, uncompress initrd cost 2701 ms **** Press CTRL+B to enter BOOT menu or CTRL+E to boot DFX: 2 Info: The password is empty. For security purposes, change the password. New password: Confirm password: The password is changed successfully. Main Menu 1. Default startup 2. Serial submenu 3. Ethernet submenu 4. Startup parameters submenu 5. File system submenu 6. Password manager submenu 7. Restore factory defaults 8. Reboot Enter your choice(1-8): 6 Password manager submenu 1. Modify bootloader password 2. Clear the console login password 3. Reset bootloader password 0. Return Enter your choice(0-3): 2 Caution: A new console password must be set after the restart. Continue now? Yes(y) or No(n): y Boot Disk: flash Startup File: CE6820-V200R019C10SPC800.cc code here... 端口聚合/链路聚合[sw1]interface Eth-Trunk 1 [sw1-Eth-Trunk1]mode manual load-balance [sw1-Eth-Trunk1]int g0/0/1 [sw1-GigabitEthernet0/0/1]eth-trunk 1 [sw1-GigabitEthernet0/0/1]int g0/0/2 [sw1-GigabitEthernet0/0/2]eth-trunk 1
2022年09月21日
225 阅读
0 评论
3 点赞
2022-09-18
RHCE学习笔记1
网络开机启动第二天:基础命令manls-l 长格式-rw-------. 1 root root 6503 Apr 23 2020 anaconda-ks.cfgdr-xr-xr-x. 5 root root 4096 May 7 2020 bootbrw-rw----. 1 root disk 252, 0 Aug 14 17:27 vdalrwxrwxrwx. 1 root root 15 Aug 14 17:26 stderr -> /proc/self/fd/2普通文件d 目录b 块设备l 软连接、符号链接p 管理我呢见s 套接字c 字符查看所有块设备ls -l | grep ^b查看所有s结尾ls -l | grep s$dr-xr-xr-x. 5 root root 4096 May 7 2020 boot5代表连接数,五个目录,包括 . ..-a 显示隐藏文件-t 按照文件生成时间排序-r 按照文件生成时间逆向排序生成一个文件dd if=/dev/zero of=/test.raw bs=1G count=2ll -h /test.raw-rw-r--r--. 1 root root 2.0G Aug 14 18:13 /test.raw-h 文件大小可视化-Z selinux安全性上下文-R 显示子目录内容cd 切换目录cd ~ 家目录cd - 返回上次目录pwd 显示当前目录 print work direc/etc/bashrc 修改45行 W改为w,在终端显示完整路径,修改后bash生效mkdir生成目录mkdir xx-p 连续创建目录!mkdir执行上次命令rmdir删除目录 先cd过去-p 连续删除目录 rmdir test1/test2/ -ptouch 1.txt 创建空文件第二次 创建已有的1.txtstat xx 查看文件详细信息access time Atime 访问时间modify time Mitme 修改时间Change time Ctime 修改文件的权限时间touch 保证三个时间一致cp复制命令cp -a a包含dpr参数 复制目录,连同目录子文件一块复制 -d 如果目录有软连接,一块复制-p 权限复制-r 递归-i 目标同名文件提示-f 覆盖目标同名文件不提示cp -r -i -f -p -d 复制文件-v verbose 显示进度不使用别名 \cpmove文件移动、剪切、重命名-b backup 同名文件备份 ~-f 强制覆盖rm 删除-f 强制删除-r 递归删除目录rm只删除inodecat 显示文件内容cat -n 显示行号输出重定向将文件内容合并cat 1.txt 2.txt > new.txt 覆盖cat 1.txt 2.txt >>new.txt 追加清空文件数据段内容cat /dev/null > 3.txthead 显示前10行head anaconda-ks.cfg -n 10显示前10个字符head anaconda-ks.cfg -c 10tail显示后10行tail -n 10显示后10个字符tail -c 10实时输出tail /var/log/secure -fmore 翻页显示回车一行空格一页b 上一页q 退出+/xx 直接显示xx+100 直接显示100行管道符 将不同命令结合使用 cat -n anaconda-ks.cfg | more +100 显示第100行less 翻页显示,支持上下键find命令不加参数 查看当前目录下所有文件和目录find /etc -name inittab 查找etc下ininttab文件find / -iname myhosts 忽略大小写查询grep显示文件数据库内关键字的行grep runlevel /etc/inittab多关键字 -egrep -e runlevel -e target /etc/inittab显示不匹配文本的所有行 -vgrep -e runlevel -e target /etc/inittab -v不显示空行和注释行,仅显示有效内容grep -e ^# -e ^$ 4.txt -v显示关键词行和后三行grep runlevels /etc/inittab -A 3tree 树状显示文件夹tree /opt/ -d 只看目录tree /opt/ -L 1 只显示1级目录 tree / -L 1 -F 显示全路径tree / -L 1 -F -p 显示权限硬链接 inode号相同1、不占用inode编号2、节约空间不能够跨文件系统创建链接ln xx xx软连接1、可以跨文件系统2、需要源文件存在,否则链接文件失效3、跨文件系统之后,需要占用inode编号创建软连接ln -s时间 dateCST 中央标准时间UTC 格林威治时间date -u 显示格林威治时间timedatectltimedatectl set-time "2022-07-14 18:00:00" 修改时间激活NTP服务器timedatectl set-ntp true修改时区timedatectl set-timezone Asia/Singaporew 显示终端登陆状态up 6:06, 开机6小时who 谁正在登陆last一段时间内用户登录情况lastbhostname查看主机名hostnamectl查看系统信息hostnamectl set-hostname servera设置主机名uname查看内核信息df 查看文件系统df -h df -hT 查看文件系统df -iTh 查看inode空间du 文件目录具体大小du -h -m -k 显示单位du -sh ~ 显示目录空间大小du -sh * 当前目录每一个文件大小du -sh /* 根目录下每一个文件大小lscpu查看cpu信息free -h 查看内存信息tar -zcvf 创建tar -ztvf 查看tar -zxvf 解压 -C 指定目录shell环境history -c 从内存中清除命令history -w 清除用户目录下.bash_history文件alias xxunalias xxalias la='ls -alth'设置别名单个用户.bashrc全局用户/etc/profilevi编辑器编辑模式 - 插入模式 - 命令模式vi +15 xx 光标定位文件15行vi + xx 光标定位最后一行vi +/xx xx 光标定位到xx:set nu显示行号翻页ctrl + u d f bnzz 50zz 跳转到第50行zz 滚动到底部i 插入光标前a 光标后I 行首A 行尾o 当前行之下插入一行O 当前行之上插入一行寄存器操作p 取出 粘贴P 光标之上粘贴nyy 复制行 2yy 复制两行nyl 复制字符 2yl 复制两个字符ndd 删除行 2dd删除两行ndl 删除字符 2dl删除两个字符x 单个删除搜索/?:set nu 显示行号:set nonu 隐藏行号替换:2,5s/a/A/g 2-5行a替换成A:1,$s/a/A/g 全部替换删除列1、crtl+v2、移动光标选择3、x删除非兼容模式,避免出现AB情况:set nocompatible第三天:/etc/passwd 本地用户账户属性的定义文件,加密口令不放在其中用户名 密码 UID GID 备注信息 家目录 shell工作环境root:x:0:0:root:/root:/bin/bashroot 用户名 唯一 区分大小写x 历史遗留问题 保证兼容性0 UID0 该用户所在的私有组、主要组的ID GIDroot 备注信息/root 家目录/bin/bash shell环境存放加密口令 /etc/shadowroot:$6$ElcThAePSlHegjYu$j.6Ir2SZUdDfS2nO7eHlaT0nzaFINgSnCFy0pU.xCggeYmbkcUdMawtdKvB6CqbTletZTMcBiHyF0C8USmN8j/:18389:0:99999:7:::root 用户名$6 加密口令$6 加密hash方式 SHA-512$1 MD5$5 SHA-256$oZ1JGQiQ salt 防止、避免多个用户设置同样的密码的时候密文账号一样$j.6Ir2SZUdDfS2nO7eHlaT0nzaFINgSnCFy0pU.xCggeYmbkcUdMawtdKvB6CqbTletZTMcBiHyF0C8USmN8j/ 散列值18389 最近更改过的日期的值0 什么时候可以进行更改,0代表随时可以更改99999 什么时候密码过期 一般为42-60天 最晚90天过期incative 宽限天数expire 账户的过期时间blank 预留字段创建用户 useradd upnange1、passwd有了upnange属性记录2、shadow有了upnange时间属性3、用户UID基于目前最大的UID+14、创建该用户同名的组upnange,GID和UID保持同步5、/home目录下给该用户创建家目录6、linux给该用户一个正常的工作环境bash,可以通过本地、远程进行登录7、linux会在/var/spool/mail目录创建该用户的mail邮件交换空间8、linux会在/var/spool/cron未来定义使用该用户的计划任务作业意义:1、掌握细节2、通过加参数自定义创建用户 3、了解用户规则的控制文件 /etc/default/useradd /etc/login.defs4、修改用户属性5、删除用户用户创建控制文件/etc/default/useradduseradd defaults fileGROUP=100HOME=/home 家目录INACTIVE=-1 没有宽限期EXPIRE=SHELL=/bin/bash 默认shellSKEL=/etc/skelCREATE_MAIL_SPOOL=yes 创建邮件池grep -e "#" -e "^$" -v /etc/login.defsMAIL_DIR /var/spool/mail PASS_MAX_DAYS 99999PASS_MIN_DAYS 0 PASS_MIN_LEN 5 密码长度PASS_WARN_AGE 7UID_MIN 1000 UID从1000起步UID_MAX 60000SYS_UID_MIN 201 系统用户从201开始SYS_UID_MAX 999GID_MIN 1000GID_MAX 60000SYS_GID_MIN 201SYS_GID_MAX 999CREATE_HOME yesUMASK 077USERGROUPS_ENAB yesENCRYPT_METHOD SHA512useradd upwen自定义需求:UID 1600 ,私有组和root在一个组useradd -u 1600 -g root upnange1upnange2 /opt/upnange2 不能够进行交互式登录useradd -d /opt/upnange2 -s /sbin/nologin upnangen2upnange3 过期时间 宽限期 useradd -e "2022/09/20" -f 2 upnange3用户设置口令通过passwd设置,具备特殊权限,管理员 | 普通用户 设置口令1、交互式方式passwd | passwd upnange2、结合echo、管道、标准输入的方式输入密码echo "redhat" | passwd --stdin upnange1结合shell脚本位置变量管理员root密码重置1、重启2、grub界面按e进入3、找到linux开头行最后执行rd.break中断,二虚环境删除con4、执行ctrl+x开始后续挂在使用sysroot的步骤5、来到救援模式执行mount -o rw,remount /sysroot6、执行chroot /sysroot 切换sysroot路径到根文件系统7、echo | passwd给root修改密码8、如果selinux开着 出发relable安全策略 执行touch /.autorelabel 非常关键9、执行sync 状态从内存中读取10、执行两次exit退出,此时触发selinux安全策略chage修改账号 密码的过期时间PASS_MAX_DAYS 最大密码过期时间PASS_MIN_DAYS 最小可修改密码时间,0可以随时修改chage -l root 查看root用户当前密码策略chage -M 42 root 修改密码最大过期时间42天-m 2 最小可修改密码天数2天chage -E "2022/09/10" root 账号过期时间更改用户属性 usermoduseradd -u -g -G -d -s -e usermod复用参数给用户附加一个组usermod -aG grid oracle -a append追加useradd user1让user1家目录改成/opt/user1目录 家目录迁移 /home/user1 > /opt/user1 usermod -d /opt/user1 user1 -m m迁移目录文件useradd user2临时锁定该用户不能登录使用usermod -L user2tail -3 /etc/shadow 叹号代表锁定upnange3:!!:19224:0:99999:7:2:19255:user1:!!:19224:0:42:7:::user2:!$6$Hw5Ojxz/RSGu8AYh$3TovAvQjQlSKMPC4O7PcPpXZw/N7K5iAlu8sg4Ki0uezKKzHMZ.bUMkF6SLLMlqex5Q.5.FlFF8s.jzyKoDyq.:19224:0:42:7:::-U解锁usermod -l user200 user100 修改用户名,用户目录不变修改shell环境chsh -s /bin/bash user200查找passwd文件中UID为0的文件1、usermod -u 1009 user1 修改UID2、usermod -L user1 锁定用户3、userdel user1 删除用户4、编辑passwd 注释掉user15、修改用户shell chsh | usermod -s删除用户 userdel-r 清理用户相关信息 属性、配置、家目录、mail用户彻底删除后,该用户曾经的遗留文件会变为UIDid 查看用户ID信息,可以判断某个用户是否创建成功-G 查看附加组想知道一个用户在哪些组当中,用id命令查看su 切换用户su - 切换用户同时切换环境配置su闲置/etc/pam.d/suauth required pam_wheel.so use_uidusermod -aG wheel user400只有user400可以su到root用户用户管理:1、创建 useradd2、改属性 usermod3、删除 userdel4、账户 密码复杂性 长度 用户su5、chage 密码过期 账户过期时间6、root用户 密码恢复组 /etc/grouproot:x:0:root组名x 历史遗留兼容性0 GID最后一位为附加组groupadd -g 新建指定组IDgroupmod -n 改组名groupdel 删除组,私有组无法删除用户添加或者从组中移除,附加组gpasswd -a 添加gpasswd -d 移除用户权限管理对用户 | 组设置权限1、基本权限2、特殊权限3、ACL权限属主 属组 其他 基本权限普通文件 r访问 w修改 x执行目录 r浏览遍历 w删除目录中内容、移动目录内容 x可以切换到该目录权限表示:1、数字表示r4 w2 x1 -0在root工作环境下文件-rw-r--r-- 644目录drwxr-xr-x 7552、文字表示属主u属组g其他人o所有人a没有-修改权限:chmod 增加执行权限 chmod 755 filechmod u+x,g+x,o+x file 或 a+x filechmod -R 递归ACL权限 细粒度权限分配 文字标识法setfacl -m u:upwen1:rwx file1 根据用户添加权限setfacl -m g:upwen:rw- file1 根据组添加权限setfacl -m o 对其他人-M 根据目前的ACL修改-x 根据文件中的访问控制列表删除条目-b 删除所有访问控制列表-R 递归操作查看acl权限getfacl文件权限最后有加号代表使用ACL权限改文件目录拥有者 chown;chown -R 递归特殊权限1、suid 执行-rwsr-xr-x. 1 root root 33K Dec 14 2019 /usr/bin/passwd大写S不是有效suid,必须是小写,普通用户可以临时拥有权限chmod u+s2、sgid应用在目录上,该目录所建立的文件或子目录的拥有者都会是该目录的拥有者应用在文件上,普通用户会临时拥有组的权限chmod g+s3、sticky粘滞位只能用在目录里,只有文件拥有者和root用户可以删除对方的文件chmod o+tchown修改属主属组-R递归umask0022第一个 特殊权限 suid4 sgid2 stcky1第二个 拥有者第三个 组第四个 其他.bashrc写入umasksudovisudo 添加用户设置无密码 NOPASSWD:ALL进程管理toplscpu查看CPU信息uptime 开机时间 负载w 查看负载 登录用户ps aux 查看所有进程ps -ef ps -z 进程所对应的selinux安全性上下文是什么 selinuxps -efZ 进程安全上下文ps -u root 查看用户的进程kill关闭 杀死进程kill -9 pkill -U root 停止所有root用户的进程pkill -t pts/0 踢掉pts0用户进程的挂起和恢复ctrl+z 挂起ctrl+c 终止jobs查看后台进程fg 1 切换到前台xx & 后台执行SSH配置 /etc/ssh/sshd_config禁止root登录ssh PermitRoot制定普通用户登录ssh AllowUsers user1ssh密码尝试次数 MaxAuthTries 5ssh登陆优化 UseDNS no远端链接并执行命令ssh -X -I root 10.10.10.10 name免密登录私钥文件 id_rsa公钥文件 id_rsa.pub家目录.ssh目录 ssh-keygen -t rsa 家目录下生成密钥复制公钥给对方 给serverb主机的root用户,此后可以自动登录serverb主机ssh-copy-id root@serverb此时为单向免密,重复即可实现双向免密linux软件包管理RPM软件包rpm安装 rpm -ivh content.example.com classroom主机rpm查询 rpm -qa | grep bashrpm查询多个包 rpm -qa | egrep "vsftpd|sshd|chrony"查询一批软件包rpm -q --qf 根据软件包完整名称rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' \vsftpd \chronyd \crond \autofs忽略依赖关系强制安装--force --nodeps查看软件包详细信息rpm -qi 文件 命令 程序 由哪个RPM软件包抽取出来rpm -q --whatprovides /etc/hostssetup-2.12.2-5.el8.noarch rpm -qf /etc/hostssetup-2.12.2-5.el8.noarch查询某个软件包在linux系统上产生哪些文件 rpm -ql bash/etc/skel/.bash_logout/etc/skel/.bash_profile查询某个软件的配置文件有哪些rpm -qc bash/etc/skel/.bash_logout/etc/skel/.bash_profile/etc/skel/.bashrc从软包抽取文件,文件抽取到当前目录rpm2cpio cpiorpm2cpio systemd-239-29.el8.x86_64.rpm | cpio -imdrpm -Uvh 软件包更新updaterpm -e 卸载软件包YUM 基于rpm软件包 软件仓库软件仓库的来源:1、系统的ISO2、借助互联网 www.rpmfind.com配置搭建yum仓库 本地/etc/yum.repos.d目录,创建repo仓库文件路径baseurl 1本地 2http 3ftp本地:baseurl=file:///mnt/BaseOS/Packageshttp:baseurl=https://cat rhel_dvd.repo[rhel-8.2-for-x86_64-baseos-rpms]baseurl = http://content.example.com/rhel8.2/x86_64/dvd/BaseOS 路径enabled = true 启用该仓库gpgcheck = false 验证软件是否符合官方签名name = Red Hat Enterprise Linux 8.2 BaseOS (dvd) 仓库描述总结:yum仓库配置的格式/etc/yum.repos.d 目录touch user.repeo[]仓库名称name=仓库描述baseurl=file:///mnt http:// ftp://enabled=1 | true | 0 | false 启用gpgcheck= 1 | true | 0 | false 启用仓库验证gpgkey=file:/// | http://repo一个文件可以满足多个仓库建立rpm --import key文件导入rpm数据库yum命令的操作repo搭建好后1、创建元信息yum makecache2、显示仓库状态yum repolist all3、验证repo仓库可用性 罗列repo中所有的软件yum listzsh-html.noarch 部分架构zstd.x86_64 64位zziplib.i686 32位4、查看已经安装过的软件包yum list installed@anaconda 出厂就装好了5、查看软件包详细信息yum info vsftpd6、了解mariadb软件包的依赖关系 yum deplist mariadb7、通过yum安装mariadb解决依赖问题yum installyum localinstall8、查看可用于升级的软件包yum list updates9、检查可更新的程序yum check-update10、搜索软件包yum search11、卸载软件包yum remove12、重新安装软件yum resinstall13、清空缓存yum clean all14、更新软件yum update15、查看文件来自哪个包yum whatprovides16、按软件版本高低显示yum list --showduplicates软件包组yum grouplist 显示软件包组yum groupinfo 显示软件包组详细信息yum groupinstall groupremove groupupdate 安装 卸载 更新yum日志存放路径/var/log/dnf.log模块流yum module list 列出当前模块yum module list | grep container yum module info container-tools 列出流内容yum module list --profile container-tools:2.0 查看指定模块的具体信息yum module install httpd 安装httpd软件模块流yum module install nginx 安装nginx流yum module remove nginx 卸载nginx流yum module reset nginx 删除后将状态resetyum module install --profile nginx:1.16 安装指定版本软件流 卸载、reset后才能切换磁盘管理盘/dev/sda sata sas scsi usb/dev/vdb kvm/dev/nvme0 m.2 pcielsblk 显示所有块设备lsblk -fp显示文件系统格式、UUID分区类型BIOS&MBR 512字节 bootloader446+DPT64(每个分区开始-结束 16字节x4)+2校验UEFI&GPT 文件系统传统文件系统 - ceph开源分布式文件系统格式 ext234 xfs磁盘分区工具fdisk mbrgdisk gptparted 全能型标准分区卷方式 LVM mdadm VD0 stratis标准形式:83扩展分区:5LVM PV物理卷:8eswap分区:82按T键查看fdisk /dev/vdbw 保存n 创建d 删除t 修改分区标识l 查看所有分区标识p 查看现在的分区MiB 整除1024 MB 整除1000gdisk /dev/vdco 初始化为gptparted修改后直接生效helpmklabel gpt 转换为gptprint 查看rm 删除(parted) set 2 swap on(parted) set 3 lvm on第五天文件系统fs typeext文件系统xfs文件系统mkfs -t ext4 /dev/vdb1 格式化为ext4mkfs -t xfs /dev/vdc1 格式化xfsmount /dev/vdb1 /mnt/文件系统可以同时挂载多个目录,目录能同时挂载多个文件系统,但只显示最后一次挂载的Filesystem Type Size Used Avail Use% Mounted ondevtmpfs devtmpfs 887M 0 887M 0% /dev文件系统 文件系统类型 空间 使用 剩余 使用率 挂载点umount 可以跟挂载点 也可以跟文件系统名无法卸载分析:1、查看当前目录是否是挂载点2、有咩有其他程序在使用挂载点mkfs.ext4 mkfs.xfs 对文件系统进行格式化xfs centos7 开始默认推荐 支持更多数据量 性能高1、分配组 AG2、log 日志段 文件任何改变 创建 | 修改 | 删除3、realtime 实时段 文件系统里创建realtime 根据分配组AG 默认4个AG data内容数据段 B+树索引的机制 提供性能ext4 文件系统受损修复 linux系统级别 fsck e2fsckxfs 自己的管理工具xfs_info /dev/vdc1 查看文件系统信息meta-data=/dev/vdc1 isize=512(inode占用空间的大小) agcount=4(AG组数量), agsize=131072 blks(每个AG包含的block) = sectsz=512(删除大小) attr=2, projid32bit=1 = crc=1 finobt=1(B+树), sparse=1, rmapbt=0 = reflink=1data = bsize=4096(块大小 4k~64k) blocks=524288(块数量), imaxpct=25 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0, ftype=1log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0挂载磁盘或分区mount /dev/vdb2 挂载点挂载光盘mount /dev/sr0 挂载点 cdrom dvdrom 软连接挂载镜像文件ISOmount -t iso9600 xx.iso 挂载点挂载LVMmount /dev/卷组名/逻辑卷名称 挂载点查看目录占用lsoffuserUUID通用唯一识别码blkid/dev/vdc1: UUID="a435f26e-00d4-46f4-82f8-9e454e0f1e4d" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="20fc6814-0fee-4955-8d27-2db39eb377af"EXT文件系统修改UUIDblkid查看现在UUID uuidgen /dev/vdc1 生成分区的UUIDumount 卸载文件系统tune2fs -U fd5530b9-5c02-415e-9b74-34e25a32967d /dev/vdc1 修改ext文件系统UUIDe2fsck -f 检查文件系统XFS文件系统修改UUIDblkid查看现在UUID uuidgen /dev/vdc1 生成分区的UUIDumount 卸载文件系统xfs_admin -U 9464a796-b9f4-40a7-8bb3-24ffb06af463 /dev/vdc1 修改xfs文件系统UUIDe2fsck -f 检查文件系统/etc/fstab 重点验证文件格式UUID文件挂载点文件系统格式挂载选项 defaults默认 rw sync从内存同步0 fs dump 保证兼容性,是否备份,弃用0 fs pass 检查文件系统 0不检查 root文件系统1 其他文件系统2UUID=9464a796-b9f4-40a7-8bb3-24ffb06af463 /mnt/xfstest xfs defaults 0 0 使用UUID挂载XFS文件系统 mount -a fstab文件格式SWAPmkswap /dev/vdb2 转换为SWAP分区swapon /dev/vdb2 激活swap分区swapoff /dev/vdb2 取消swap分区开机自动挂载/etc/fstabUUID=ef675fdf-91dc-4773-851d-3ed4f95bd421 swap swap defaults 0 0pri=0 优先级,越大越优先UUID=ef675fdf-91dc-4773-851d-3ed4f95bd421 swap swap defaults,pri=20 0 0swapon -s 查看所有SWAPswapon -a 激活所有SWAPswapoff -a 卸载所有SWAPLVM逻辑卷管理器把不同的盘 不同的分区 进行抽象的管理并组合起来 转化为物理卷LVM可以实现容量大小的扩展PV物理卷 整盘、分区VG卷组 多个PV组成 PE建立在卷组之上 等同大小的格子LV逻辑卷 LE = PE逻辑卷类型条带化逻辑卷 数据放到多个PV中,性能最好PVpvcreate /dev/vdb3 创建PVpvcreate /dev/vdc3pvs | pvdisplay 查看pv信息多个PV可以隶属于同一个VGPE划格子就是在不同的PV分配对应的空间pvchange -x n /dev/vdb2 禁用PE分配空间pvchange -x y /dev/vdb2 启用PE分配空间pvchange -x n /dev/vdb3 pvremove /dev/vdb3 删除物理卷pvmove /dev/vdb3 /dev/vdc3 从vdb3迁移到vdc3,迁移后可以移除vdb3VG创建卷组vgcreate vg01 -s 8M /dev/vdb3 /dev/vdc3 将两个pv加入vgvgs | vgdisplay 显示vg信息VG #PV #LV #SN Attr VSize VFreevg01 2 0 0 wz--n- 4.50g 4.50g -SN 快照vgremove vg01 删除vg创建LV逻辑卷通过指定具体大小 2G通过只听PE的数量 10个PE 8M 10x8=80Mlvcreate -L 1G -n lv01 vg01 创建1G lv01lvcreate -l 10 -n lv02 vg01 创建10个PE lv02lvs | lvdisplay 查看lv信息lvremove 如果已经使用mount加载,则不能使用lvremove命令删除lvremove /dev/vg01/lv02 删除lv02逻辑卷路径/dev/vg01/lv02 设备DM程序路径/dev/mapper/vg01-lv02 文件系统对于逻辑卷进行格式化mkfs.xfs /dev/vg01/lv01 格式化mount /dev/mapper/vg01-lv01 挂载点 挂载扩容VG卷组扩容收缩partprobe /dev/vdd 重新读分区表vgextend vg01 /dev/vdd 将PV加入VG卷组vgreduce vg01 /dev/vdd 将PV移除VG卷组如果PV被使用,需要先pvmove迁移再移除LV逻辑卷扩容和收缩1、明确逻辑卷的文件系统2、先对文件系统对应的逻辑卷进行扩容3、重新修改文件系统的尺寸大小ext系列扩容1、通过vgdisplay查看是否有可用的pe/size2、lvextend -L +1G -n /dev/vg02/lv02给LV02添加1G容量3、lvextend -l +100 -n /dev/vg02/lv02给LV02添加100个PE4、resize2fs /dev/mapper/vg02-lv02 为ext4文件系统扩容该操作不需要卸载挂载点xfs系列扩容1、通过vgdisplay查看是否有可用的pe/size2、lvextend -L +1G -n /dev/vg01/lv01给LV01添加1G容量3、lvextend -l +100 -n /dev/vg01/lv01给LV01添加100个PE4、xfs_growfs /dev/mapper/vg01-lv01 为xfs文件系统扩容该操作不需要卸载挂载点ext系列收缩1、umount /mnt/ext4 卸载挂载点2、fsck | e2fsck 扫描文件系统3、resize2fs -f /dev/mapper/vg01-lv02 2G 收缩文件系统到2G4、lvreduce -L 2G /dev/vg01/lv02 收缩逻辑卷到2G5、mount /dev/mapper/vg01-lv02 /mnt/ext4/ 重新挂载文件系统xfs系列收缩xfs不能进行动态收缩,需要备份、格式化、还原,与ext4收缩步骤不同1、xfsdump -f /xfs.dump /mnt/xfs 备份xfs文件系统 file xfs.dump查看备份的文件xfsdump archive (version 3)2、umount /mnt/xfs 卸载挂载点3、lvreduce -L 1G /dev/vg01/lv01 收缩逻辑卷4、mkfs.xfs /dev/mapper/vg01-lv01 -f 强制格式化逻辑卷5、mount /dev/mapper/vg01-lv01 /mnt/xfs 挂载文件系统6、xfsrestore -f /xfs.dump /mnt/xfs 通过备份文件恢复扩容问题1、lvextend扩LV2、resize2fs扩文件系统的大小自动扩容lvextend -r -L +1G /dev/vg01/lv01 此时-r参数等于resize2fs容量调整通用lvresize 容量的调整(扩容或收缩)关于逻辑卷的配置的导入导出关于重要的逻辑卷 快照lvconvertlinux:LVMwindows:动态磁盘AIX:rootvg mirror都是基于宿主机操作系统 软件方式结构化数据:虚拟机、容器非结构化数据:视频、图片VDO 重复数据删除 节约空间结构化数据1:10压缩比 盘50G压缩出50G*10=500G非结构化数据:1:3压缩比 盘50G压缩出50G*3=150GVDOyum install vdo kmod-vdo安装VDO卷只能是/dev/vdb裸盘,不能是分区1、systemctl enable vdo --now 配置vdo服务器开机启动2、systemctl status vdo 查看VDO状态3、vdo create --name=vdo01 --device /dev/vdb --vdoLogicalSize=50G 创建VDO卷,如果无法创建清除盘分区表wipefs /dev/vdb -a4、mkfs.xfs -K /dev/mapper/vdo01 创建文件系统5、mount /dev/mapper/vdo01 /mnt/xfs 挂载文件系统6、UUID="381039fe-d0d6-4dbb-b29a-753920c4ce86" /mnt/xfs xfs defaults,x-systemd.requires=vdo.service 0 0 配置fstab文件vdostats --human-readable 查看vdo信息Stratis存储资源池 精简置备文件系统xfs 安装1、服务启动开机启动2、查看状态3、创建4、挂载5、fstab快照销毁清除分区表信息wipefs /dev/vdb -a计划任务/etc/cron.deny 不允许哪些用户实施计划任务crontab -e 编辑-u 指定用户-r 删除当前crontab任务 -r -u 删除指定用户crontab任务-l 显示当前crontab任务/usr/bin/rm xx 使用全路径,通过which查询systemctl restart crontab编辑完后重启crond服务/var/log/cron 查看cron日志/etc/crontab 配置文件示例crontab计划任务command分 时 日 月 周 命令(全路径 which)考试中全路径minute 每个小时的第几分钟huor 每天的第几个小时day 每月的第几个天monteh 每年的第几个月Day of Week 每个周的第几天command每天的4点2020 4 * command每月9日3点50分50 3 9 command每年9月8日0点1分1 0 8 9 * command每天凌晨2点0 2 * command每天凌晨2点的每分钟执行一次2 * command/1 | 代表每一分钟*/10 代表每十分钟每月10号10点5分5 10 10 command每年的10月10号10点5分5 10 10 10 * command每月10号的10点5分,15点5分,20点5分5 10,15,20 10 command 逗号隔开,不连续每月10号10点5分,11点5分-15点5分5 10-15 10 command 10至15,连续每月11点到13点之间,每十分钟/10 11-13 command查询命令winch 在PATH变量的路径中查找指定的命令which passwd查找passwd命令位置whereis 用于程序名搜索,二进制,man,源代码文件whereis passwd 查找passwd程序相关文件passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gzlocate 基于数据库查询,不实时updatedb 使用前需要手动更新数据库find实时查询,不基于数据库,查询速度慢按文件名查找find / -name upwen 查找根目录下名字为upwen的文件find / -iname upwen 不区分大小写按照用户名、组查找find / -user upwen1查找用户upwen1的文件find / -user upwen1 -group upwen1 查找用户和组都为upwen1的文件,逻辑或find / -user upwen1 -o -group upwen1 查找用户或组为upwen1的用户,逻辑与find / -user upwen1 -not -group upwen1 查找用户为upwen1但组不为upwen1,逻辑与查找没有属主属组的文件find -nouser -o -nogroup 查找没有属主或没有属主的文件查找不是root用户的文件find / -not -user root 查找属主不是root的文件按权限查找find -perm 644 查找权限为644的文件find -perm /600 查找权限中满足任何一位权限的文件属主6或属组0或其他0find -perm -655 查找权限完全满足655的文件 精确控制find -perm /4000 查找具有特殊权限的文件,匹配任意一位根据文件大小查找find -size 10M 查找大小为10M的文件find -size +10M 查找大于10M的文件find -size -10M 查找小于10M的文件find / -size +40k -size -50k -perm /4000 查找大于40K小于50K特殊权限满足4000中任意一位的文件按文件类型查找find / -type l 查找文件类型为软连接的文件按时间查找find -atime +1 查找1天前的文件find -atime +1 -atime -900 查找1天前到前900天内的文件find -amin -60 查找60分钟内的文件find -amin -60 -amin +1 查找1分钟前到前60分钟内的文件find后执行命令-exec rm -f {} \; find后执行删除,花括号代表结果find -amin -60 -amin +20 -exec rm -f {} \; 删除当前目录下创建于60分钟前到20分钟前的文件find -amin -60 -amin +20 -ok rm {} \; 询问删除当前目录下创建于60分钟前到20分钟前的文件网络附加存储NFS 网络文件系统服务 不建议使用fstab自动挂载NFS守护进程nfsd 基本守护进程mountd 管理NFS文件系统rpcbind 进行端口映射安装启动服务nfs-server rpcbind 客户端nfs-utils配置文件/etc/exports输出目录 客户端1 选项1 选项2 客户端2 选项1 选项2ro只读 rw读写 用户映射选项all_squash 映射为匿名用户 nfsnobodyno_all_squash 不映射为匿名用户root_squash 将root映射为默认no_root_squash 不讲root映射为默认anonuid=指定用户IDanongid=指定组IDsecure 限制客户端只能从小于1024的IP端口连接NFS服务器,默认设置insecure 允许客户端从大约1024的端口连接NFS服务器sync 同步写入内存缓冲区和磁盘async 使用内存缓存wdelay 写操作先在内存缓存no_wdelay 写操作理解执行,配合syncsubtree_check 若输出目录时一个子目录,则NFS检查父目录权限,默认no_subtree_check 不检查配置范例/home/ftp *() 共享全部用户可读写/home/ftp 192.168.1.0/255.255.255.0(rw) 允许网段读写/home/ftp 192.168.1.0/24(rw,async) *(ro) 允许网段读写,内存缓存 其他网段只读/home/fto *.gdvcp.net(rw,insecure,all_squash,sync,no_wdelay) 允许域名相关操作/mnt/cdrom *(ro) 共享光驱创建systemctl start nfs-server.service 开启nfs-server服务/etc/exports 添加NFS配置文件/mnt *(rw,sync,no_wdelay) 默认为匿名组nobody,需要给O写入权限(o+w)exportfs -a 检查配置文件exportfs -rv 立即生效并查看详情showmount -eclnt_create: RPC: Program not registeredsystemctl stop firewalld.service 临时关闭firewalld防火墙rpc.mountdshowmount -eExport list for servera.lab.example.com:/mnt *开启另一台主机测试[root@serverb ~]# showmount -e servera 检查servera目前可挂载的NFSExport list for servera:/mnt *mount -t nfs servera:/mnt /mntautofs实现按需自动挂载前提:操作系统已经启动完成,安装了autofs软件,autofs实现了开机自启动使用nfs目录时autofs自动挂载思路:1、本地持续监听目录2、进入目录时,根据规则配置文件实现自动挂载autofs相关配置文件:1、/etc/auto.master 配置持续坚挺的目录及触发配置规则文件2、/etc/auto.misc 配置规则文件1、yum install autofs 安装2、systemctl enable --now autofs 启动3、/etc/auto.master 主配置文件/mnt/nfs /etc/auto.misc4、/etc/auto.misc 配置文件linux -ro,soft,intr ftp.example.org:/pub/linuxnfs -rw,nfs,sync servera:/mnt5、systemctl restart autofs.service 重启服务SELinuxps -eflZ 查看进程selinux安全性上下文ls -lZ 查看文件 | 目录 selinux安全性上下文system_u:object_r:nfs_t:s0 用户:角色:类型(重点):敏感度system_u:system_r:sshd_t:s0-s0:c0.c1023selinux工作模式Enforcing 启用selinuxpermissive 启用 不执行 警告disabled 关闭/etc/selinux/config 配置文件 考试selinux必须开启getenforce 查看当前selinux状态setenforce 0 命令不重启临时关闭SELINUX=disabled 配置文件需重启关闭selinux1、修改selinux安全性上下文 某个进程 某个文件 | 目录 合拍 进程 -> 文件2、修改端口策略考试 不能关闭selinux 一定要开启!查看selinux状态getenforce 查看selinux是否开启/etc/selinux/config SELINUX=enforcing查看进程(主体)安全性上下文ps -efZsystem_u:system_r:lvm_t:s0查看文件目录(客体)安全性上下问ls -lZsystem_u:object_r:admin_home_t:s0ls -ldZ home_root_tsemanage fcontext -l 查看已经定义好的安全性上下文策略semanage fcontext -a 追加安全性上下文策略semanage fcontext -m 修改安全性上下文策略-t 文件-r 递归修改安全性上下文[root@servera ~]# chcon -t admin_home_t /pot[root@servera ~]# ls -lZ /pot-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0 0 Sep 3 17:44 /pot恢复改过的文件的安全性上下文 默认的semanage策略所定义的策略[root@servera ~]# restorecon /pot[root@servera ~]# ls -lZ /pot-rw-r--r--. 1 root root unconfined_u:object_r:etc_runtime_t:s0 0 Sep 3 17:44 /potsemanage fcontext -a -t httpd_sys_content_t "/opt/www(/.*)?" 修改www目录下默认策略restorecon -v 1 恢复目录默认策略修改端口策略模块流安装httpd yum module install httpd 模块流安装rpm -qc | ql 查看安装包的配置文件信息vi +/Listen /etc/httpd/conf/httpd.conf 修改httpd端口修改端口后启动报错,查看报错信息systemctl status httpd.service 查看报错journalctl -xe 查看报错sealert -l b5a11e87-4300-4fe2-8c4d-6e16ebc9ffe9 查看详细原因semanage port -l | grep http查看默认http端口上下文semanage port -a -t http_port_t -p tcp 84 添加端口上下文再次启动即可不常用setsebool httpd_enable_homedirs 1 更改getsebool -asetsebool 修改布尔值 0 | 1防护墙firewalld代替iptablesipables nat表 | filter表 | mangle - input链 ouput 链 forward 链 - xxx规则 ACCEPT | DROPfirewalld zone区域关闭启动状态systemctl stop | start | status firewalld查看当前防火墙规则firewall-cmd --list-allfirewalld 对端口 | 对服务 进行操作firewalld支持哪些服务firewall-cmd --list-services 查看当前开放哪些服务firewall-cmd --get-services 查看能够支持的服务放行端口 允许外部主机访问firewall-cmd --add-port=80/tcp --permanent 将80tcp端口永久生效firewall-cmd --reload 刷新立即生效开放NFS服务nfs rpc-bind mount 三个服务支撑firewall-cmd --add-service=nfs --permanent firewall-cmd --add-service=mountd --permanent firewall-cmd --add-service=rpc-bind --permanentfirewall-cmd --reload富规则 => iptables自定义规则Podmanweb应用架构 LAMP | LNMPL lightA apache ICM 安装配置管理M mysql | mariadbP PHP容器是操作系统上很特殊的进程1、视图 namespace 容器里跟操作系统没区别 共享内核 ; 容器1 | 容器 2 进程间隔离2、占用过多的系统资源 资源控制 cgroups调优范例while :; do :; done & 死循环 cd /sys/fs/cgroup/cpu/mkdir container 进程echo 20000 > cpu.cfs_quota_us 限制CPU使用率20000us=20ms=20%echo 2828 > tasks 限制对应的进程echo 2834 > tasks 限制对应的进程linux调优的一种手段虚拟化vmware vsphere微软 hyper-vKVM容器Docker云原生 CNCF标准1、linux -> podman 逐步替代docker2、通过kubernets容器管理平台 管理 监控 docker容器运行状态容器 本身没有价值 工具 docker podman工具docker podman 镜像容器的资源编排 对接应用Ansible 工具 节省 工作时间 提升工作效率docker container image lsdocker pull xxxdocker run xxxdockerfile dockercompose dockerswarmdocker 进程 rootpodman 可以运行rootless的容器 可以作为systemd服务管理 本身无daemon 容器管理可以基于普通用户 systemctl --user xxx status xxx.services考试不需要安装podman,只需要执行podman --version 确认是1.9.3平时练习需要安装1.9.3实验环境练习ssh student@workstationlab containers-basic start 启动环境安装container-toolsservera#yum module install container-tools[upnange@servera ~]$ podman -vpodman version 1.9.3登录容器注册服务器查看家目录下.config/containers是否有registries.conf如果没有,复制/etc/containers/registries.conf到家目录下并调整配置文件普通用户cat .config/containers/registries.conf[[registry]]location = "registry.lab.example.com"insecure = trueblocked = false验证登录[upnange@servera containers]$ podman login registry.lab.example.comUsername: adminPassword:redhat321Login Succeeded!镜像使用搜索镜像podman search nginx使用apache最新版本httpd:latest使用apache 2.4httpd:2.4搜索 registry.lab.example.com 到底有哪些镜像可用podman search registry.lab.example.com/领取镜像pullpodman pull registry.lab.example.com/rhel8/httpd-24 使用完整路径拉取查看镜像详细信息inspectpodman inspect registry.lab.example.com/rhel8/httpd-24根据json的格式显示出镜像的信息删除镜像rmipodman rmi nginx查看当前镜像imagespodman images通过镜像产生不同的容器创建容器podman create --name=upnange1 registry.lab.example.com/rhel8/httpd-24启动容器podman start upnange1停止容器podman stop upnange1删除容器podman rm upnange1停止并删除podman stop webserver && podman rm webserver podman ps 查看已经运行的容器podman ps -a查看所有的容器(包含已启动已停止等)直接启动镜像pdoman run --name=upnange2 nginx参数-d 后台运行--name 容器名称-v 将宿主机的一个目录映射给容器webserver中的某一个目录 宿主:容器:Z 自动将SElinux安全性上下文应用到主机-t 给一个tty终端-i 交互式-p 8081:8080 宿主机:容器 端口映射完整podman run -dt --name-webserver -v /home/upnange/testdir:/var/log/journal:Z -p 8081:8080 registry.lab.example.com/rhel8/httpd-24进入容器执行终端podman exec -it webserver /bin/bashpodman rootless 非root用户环境对于webserver容器做成基于普通用户upnange 通过systemd 管理容器创建普通用户创建podman注册配置mkdir -p .config/systemd/user/ 创建systemd目录,固定写法/home/upnange/.config/systemd/user生成systemd配置文件,在上面的目录中podman generate systemd --name webserver --files --new停止并删除原容器podman stop webserver && podman rm webserver 重新加载systemd服务 systemctl daemon-reload --user启动并开机启动自己定义容器systemctl --user enable container-webserver.serivce -now容器默认情况下是临时的强制普通用户的服务器开机自启动loginctl enable-linger upnangeloginctl show-user upnangelsof -i:8081 查看端口监听日志服务rsyslog.server/etc/rsyslog.conf 日志定义文件kern.* /dev/console 内核日志,默认不开*.info;mail.none;authpriv.none;cron.none /var/log/messages 任何类型的information信息级别 邮件 认证 计划任务除外authpriv.* /var/log/secure 认证信息mail.* -/var/log/maillog 非同步,先读到内存,再写入硬盘cron.* /var/log/cron 计划任务.emerg :omusrmsg: 任何类型的严重级别都会在终端显示uucp,news.crit /var/log/spooler 新闻服务有关local7.* /var/log/boot.log 启动相关的信息linux系统配置为rsyslog日志服务器servera | serverb把servera作为rsyslog日志服务器,把serverb作为客户端配置服务器MODULES模块中 TCP/UDP 514端口MODULESmodule(load="imudp") # needs to be done just onceinput(type="imudp" port="514")input(type="imtcp" port="514")systemctl restart rsyslog.service 重启服务服务端防火墙开放对应端口firewall-cmd --add-service=syslog --permanentfirewall-cmd --reload tail -f /var/log/messages 监控日志配置客户端将rsyslog.conf 中日志路径配置位@servera即可systemctl restart syslog 重启服务jounal日志/run/log/journal/ 默认内存位置journalctl -n 10 查看前十行journalctl -p err 查看所有错误日志journalctl --since "2021-06-04 10:00:00" --until "2021-06-05 10:00:00" 按时间范围查看日志[root@servera ~]# journalctl -b -1 查看上一次重启之后的日志Specifying boot ID or boot offset has no effect, no persistent journal was found. 没有做持久化持久化存储配置journal从/run/log/journal/ 落盘/etc/systemd/journald.conf 配置文件Storage=persistent 改为persistentsystemctl restart systemd-journald.service 重启服务器/var/log/journal/ 持久化存储目录日志文件轮替logrotate行轮替,防止占用太多空间,按照一定的规则产生通常在四周之后丢弃最旧的文件 /etc/logrotate.conf 配置文件手动发送syslog消息logger-p local0~local7 不同环境不同logger -p local3.info "666"NTP网络时间协议ntp chronyd 两者不能共用/etc/chrony.conf 主配置文件server 172.25.254.254 iburst 配置NTP服务器allow 192.168/16 允许充当服务器chronyc sources -v 查看同步状态systemctl restart chronyd.service 重启服务性能调优linux系统会给一些已经做好的调优集,会根据目前的操作系统建议调优集,比对目前活动的调优集 systemctl status tuned.service 调优服务状态tuned-adm list 查看系统调优集tuned-adm active 查看当前活动的调优集tuned-adm recommend 查看系统建议的调优集tuned-adm profile desktop 切换调优集tuned-adm profile virtual-guest 切换调优集定义变量username=upnange 定义变量echo $username 查看变量export username=10.10.10 定义内存变量export | grep username 查看内存变量declare -x username="10.10.10" 字符不能以数字开头,可以下划线开头存在空格使用单双引号双引号 "" 保留特殊意义单引号'' 原样输出[root@servera ~]# username1="$username"[root@servera ~]# echo $username110.10.10[root@servera ~]# username2='$username'[root@servera ~]# echo $username2$username确认用户是否已经创建id upnange变量默认位字符串声明变量类型 declare -i int类型[root@servera ~]# var10=10[root@servera ~]# var20=20[root@servera ~]# var30=$var10+var20[root@servera ~]# echo $var3010+20[root@servera ~]# declare -i var30=$var10+var20[root@servera ~]# echo $var3030其他变量:$1 $2 $3 #位置变量 执行脚本时后面写位置变量的内容$0 脚本名称$$ 查看PID$? 命令执行后的返回状态$# 已加载位置变量的个数$* 所有位置变量的值unset xx 取消变量文本处理工具grep-i 不区分大小写-v 仅显示不包含正则表达式的匹配行^xxx 以xxx开头xxx$ 以xxx结尾-A 行数 显示正则表达式匹配项之后的行数-B 函数 显示之前的行数-r 递归匹配-e 使用多个正则表达式 netstat -tunlpa | grep -e 22 -e 111egrpnetstat -tunlpa | egrep "22|111"-v 仅显示不包含正则表达式的匹配行cut-d ":" 以冒号裁切-f 1 显示第一行[root@servera ~]# cut -d ":" -f 1 /etc/passwdrootbindaemon[root@servera ~]# cut -d ":" -f 1,2,4 /etc/passwdroot:x:0bin:x:1daemon:x:2替换seda 在当前行之下i 当前行之上d 删除n 只显示变化的行p 打印-i 直接写入文件\转义[root@servera opt]# sed '1a root' passwd.txtroot:x:0:0:root:/root:/bin/bashrootbin:x:1:1:bin:/bin:/sbin/nologin[root@servera opt]# sed -i '1,$s/root/roott/' passwd.txt[root@servera opt]# cat passwd.txtroott:x:0:0:root:/root:/bin/bash[root@servera opt]# sed -i '1,$s/root/roott/g' passwd.txt[root@servera opt]# cat passwd.txtroottt:x:0:0:roott:/roott:/bin/bash[root@servera opt]# sed -i '1,$s//bin/bash//sbin/nologin/g' passwd.txt[root@servera opt]# cat passwd.txtroottt:x:0:0:roott:/roott:/sbin/nologin文本处理工具awk-F ":" '{print $1}' 冒号分隔打印第一行[root@servera opt]# awk -F ":" '{print $1}' passwd.txtrootttbindaemon[root@servera opt]# awk -F "x" 'NR==1{print$1}' passwd.txt 以x分割打印第一行roottt:[root@servera opt]# awk 'NR==1' passwd.txt 打印第一行roottt:x:0:0:roott:/roott:/sbin/nologin[root@servera opt]# awk -F ":" 'NR==1{print$(NF)}' passwd.txt 第一行最后一列/sbin/nologin[root@servera opt]# awk -F ":" 'NR==1{print$(NF-2)}' passwd.txt 第一行倒数第三列roott[root@servera opt]# ip addr show eth0 | awk 'NR==3{print$2}' | cut -d "/" -f 1 提取IP地址172.25.250.10正则表达式. 一位任意值通配符,任意多个字符[a-z] 一位满足a-z?^&[root@servera opt]# grep r..t passwd.txtroottt:x:0:0:roott:/roott:/sbin/nologin[root@servera opt]# grep r*t passwd.txtroottt:x:0:0:roott:/roott:/sbin/nologin[root@servera opt]# grep r.*t passwd.txtroottt:x:0:0:roott:/roott:/sbin/nologin[root@servera opt]# grep 'ro{2}t' passwd.txt 以2个o搜索,大括号需要转义roottt:x:0:0:roott:/roott:/sbin/nologin[root@servera opt]# grep 'roo[a-z]' passwd.txt 匹配a-z任意一个字母roottt:x:0:0:roott:/roott:/sbin/nologinshell脚本格式!/bin/bash 定义解释器shell对于缩进格式没有要求 for循环语句passwd=$1for i in $(seq 1 5);douseradd test$iecho "test$i"echo "$passwd" | passwd --stdin test$idone分支控制test判断-f 文件-d 目录-e 路径[root@servera opt]# test -f /etc/inittab[root@servera opt]# echo $?0[root@servera opt]# test -e /etc/inittab ;echo $?0if [];thenelif [];thenelsefiVI粘贴模式:set paste 保持原格式ansible自动化环境rh294 12G-16Gbastion 路由器classroom 存放资料workstation ansible 管理节点,官方要求使用student普通用户servera 受管理节点serverbservercserverdansible核心1、控制节点2、被管理节点3、自动化模块4、清单inventory(静态,手动填写 | 动态 结合CMDB配置管理数据库 通过python调用CMDB设备列表、干系人)5、playbook 剧本,按照清单中组、主机、设备等推送自动化的任务(结合大量的自动化模块)6、playbook 剧本重复使用 在不同大项目 提高执行效率 需要role角色CMDB模型 人 事 物约束 SLA 服务级别协议锐捷设备 》坏了风扇 》干系人 30分钟 内做出实质性 响应 》 2小时 内达到现场 换掉ansible结合CMDB拿到所有设备 操作系统 存储 服务器 资产信息 单向 免密add-hoc 临时命令 playbook剧本 role角色ansibletower 增加安全、控制力和扩展性安装ansibleyum install ansibleansible --versionansible 2.9.21 与考试版本一样/etc/ansible/ansible.cfg 主配置文件平时练习:1、通过student普通用户进行登录2、student普通用户的家目录下新建目录ansible3、在student用户家目录ansible下有ansible.cfg、清单文件、定义角色的路径的目录rolesansible.cfg 从etc拷贝清单文件 ansible目录新建inventory的清单文件角色路径目录 ansible目录新建roles目录配置ansible.cfg,配置inventory配置管理节点到被管理节点的ssh免密,环境已经有了拷贝配置文件[student@workstation ansible]$ mkdir -p ~/ansible[student@workstation ansible]$ cp /etc/ansible/ansible.cfg ~/ansible/参照/etc/ansible/hosts形成inventory[student@workstation ansible]$ touch inventory[student@workstation ansible]$ mkdir rolesansible.cfginventory = /etc/ansible/hosts 默认清单inventory 静态 inventory.py 动态指定默认之后,使用其他清单文件需要 ansible -i xxx 指定[student@workstation ansible]$ ansible-doc -l 查看所有模块模块+参数 实现自动化的部署按有序的顺序进行编排 playbookRHCSA 基础夯实remote_user = root 指定被管理节点本地用户执行命令remote_user = student[privilege_escalation]become=Truebecome_method=sudobecome_user=rootbecome_ask_pass=False最终配置inventory = /home/student/ansible/inventoryask_pass = Falseremote_user = studentroles_path = /home/student/ansible/roles[privilege_escalation]become=Truebecome_method=sudobecome_user=rootbecome_ask_pass=False 优先级 当前路径 > 家目录 > /etc目录下inventory配置加入主机servera.lab.example.com[student@workstation ansible]$ ansible -m ping servera.lab.example.com 使用ansible ping servera.lab.example.com | FAILED! => {"msg": "Missing sudo password"}被管理节点没有为student用户配置sudovisudo | /etc/sudoers.d[root@servera sudoers.d]# cat studentstudent ALL=(ALL) NOPASSWD:ALL成功执行[student@workstation ansible]$ ansible -m ping servera.lab.example.comservera.lab.example.com | SUCCESS => {"ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong"}将该配置文件传送到其他节点[root@servera sudoers.d]# scp student root@serverb:/etc/sudoers.dJSON格式绿色 SUCCESS 任务成功但对结果了没有任何影响红色 FAILED 任务失败黄色 CHANGED 任务成功了对结果产生了影响粉色 你目前使用的模块并不是最佳实践ansible 幂等性inventory 基于主机名 基于用户名 基于组[student@workstation ansible]$ cat inventory[web]serveraserverb[db]servercserverd[student@workstation ansible]$ ansible -m ping web,db 按组执行[student@workstation ansible]$ ansible -m ping all 全部执行组嵌套[lnmp:children] 关键字:childrenwebdbansible -m ping lnmp简化描述server[c:d] 代表serverc和serverd验证资产清单ansible db -m ping -i /home/student/ansible/inventory 使用指定清单[student@workstation ansible]$ ansible-inventory -i /home/student/ansible/inventory --list 验证指定清单ungrouped 代表没有加入组的主机[student@workstation ansible]$ ansible web -i /home/student/ansible/inventory --list-hosts 查看组内成员 hosts (2):servera serverb add-hoc临时命令 快速执行单个任务[student@workstation ansible]$ ansible servera -m ping-a '' 用于带引号字符串形式去这些参数的列表,单双引号-i 指定清单位置ansible 主机组 -m 模块名称 -a '参数1=xxx 参数2=xxx' -i 指定清单ansible 主机组 -m 模块名称 -a "参数1=xxx 参数2=xxx" -i 指定清单结合传统命令+ansible模块文件类型模块 copy文件复制内容写入学习模块的使用[student@workstation ansible]$ ansible-doc copy 查看copy模块的使用[student@workstation ansible]$ ansible-doc -s copy传统命令cp -p /etc/inisttab /opt元数据信息得以保留更改权限 属主属组upnangecopy src /etc/inisttab dest /opt owner mode 4770 owner upnange group upnange setype httpd_sys_t[student@workstation ansible]$ ansible web -m copy -a 'src=/etc/ansible/hosts dest=/opt mode=4770 owner=student group=devops'[student@workstation ansible]$ ansible web -m copy -a 'content="upnage66" dest=/opt/upnange66.txt' 内容写入传统命令执行结果[student@workstation ansible]$ ansible web -m shell -a "ls -l /opt"servera | CHANGED | rc=0 >>total 4-rwsrwx---. 1 student devops 1016 Sep 5 00:01 hosts[student@workstation ansible]$ ansible web -m shell -a "cat /opt/upnange66.txt"serverb | CHANGED | rc=0 >>upnage66设置安全性上下文chcon -t[student@workstation ansible]$ ansible web -m copy -a 'content="upnage66" dest=/opt/upnange66.txt setype=admin_home_t[student@workstation ansible]$ ansible web -m shell -a "ls -Zl /opt/" serverb | CHANGED | rc=0 >>total 8-rwsrwx---. 1 student devops system_u:object_r:usr_t:s0 1016 Sep 5 00:01 hosts-rw-r--r--. 1 root root system_u:object_r:admin_home_t:s0 8 Sep 5 00:05 upnange66.txt涉及到文件目录的操作 用到file模块touch 1.txt | mkdir dir1path 目标文件[student@workstation ansible]$ ansible web -m file -a "path=/opt/upnange66.txt owner=devops group=student mode=0777 setype=httpd_sys_content_t"[student@workstation ansible]$ ansible web -m shell -a "ls -Zl /opt/" serverb | CHANGED | rc=0 >>total 8-rwsrwx---. 1 student devops system_u:object_r:usr_t:s0 1016 Sep 5 00:01 hosts-rwxrwxrwx. 1 devops student system_u:object_r:httpd_sys_content_t:s0 8 Sep 5 00:05 upnange66.txt删除文件、目录rm -r /opt/upnange66.txt[student@workstation ansible]$ ansible web -m file -a "path=/opt/upnange66.txt state=absent" 递归删除文件目录创建文件[student@workstation ansible]$ ansible web -m file -a "path=/opt/upnange66.txt state=touch"创建目录[student@workstation ansible]$ ansible web -m file -a "path=/opt/upnange state=directory"创建软连接[student@workstation ansible]$ ansible web -m file -a "src=/opt/hosts path=/opt/upnange.link state=link"从被管理节点往管理节点传文件 fetchflat=yes 不采用默认文件结构[student@workstation ansible]$ ansible web -m fetch -a "src=/opt/hosts dest=/tmp/ flat=yes" 只拷贝一份[student@workstation ansible]$ ansible web -m fetch -a "src=/opt/hosts dest=/tmp/" 按主机名建目录存放serverb | CHANGED => {"changed": true, "checksum": "da996f1a52dbae3b6b43a6c50d761e4ed5ec9a9f", "dest": "/tmp/serverb/opt/hosts", 替换功能lineinfile模块path=/ 要替换的文件regexp= 使用正则表达式的方式匹配你要修改谁line= 你要替换的内容[student@workstation ansible]$ ansible web -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line=SELINUX=disable " 修改selinux配置文件[student@workstation ansible]$ ansible web -m shell -a "cat /etc/selinux/config" 查看文件用户组有关group模块[student@workstation ansible]$ ansible web -m group -a "name=g1 state=present" 添加组[student@workstation ansible]$ ansible web -m group -a "name=g1 state=absent" 删除组[student@workstation ansible]$ ansible web -m shell -a "cat /etc/group"查看用户有关user模块[student@workstation ansible]$ ansible web -m user -a "name=upnange group=g1 uid=1800 state=present" 添加用户[student@workstation ansible]$ ansible web -m shell -a "cat /etc/passwd" 查看[student@workstation ansible]$ ansible web -m user -a "name=upnange state=absent remove=yes" 删除用户、删除相关文件、家目录yum相关模块yum_repository/etc/yum/repos.d/xxx.repo [仓库的id名称]name=baseurl=enabled=gpgcheck=gpgkey=file 生成repo文件[student@workstation ansible]$ ansible web -m yum_repository -a "name=rh294_baseos description='This is rh294 BaseOS' baseurl=http://content.example.com/rhel8.4/x86_64/dvd/BaseOS enabled=yes gpgcheck=no file=rh294_baseos"yum模块yum[student@workstation ansible]$ ansible web -m yum -a "name=vsftpd state=present" 安装软件服务相关模块service模块启动 停止 重启 重新读取 开机自启[student@workstation ansible]$ ansible web -m service -a "name=vsftpd state=started enabled=yes" 启动并开机启动[student@workstation ansible]$ ansible web -m service -a "name=vsftpd state=stopped enabled=no" 停止关禁止开机启动防火墙模块firewalld模块firewalld: service: https 服务 port: 8081/tcp 端口协议 permanent: yes 永久 state: disabled 开启关闭策略 immediate: yes 立即生效 zone: public 区域[student@workstation ansible]$ ansible web -m firewalld -a "port=8081/tcp permanent=yes state=enabled immediate=yes"[student@workstation ansible]$ ansible web -m shell -a "firewall-cmd --list-all"命令shell模块网络有关模块wget_url模块
2022年09月18日
107 阅读
0 评论
0 点赞
2022-09-18
RHCE学习笔记2
yml文件 yaml声明式语言,要求语法检测必须通过key:[空格]值hosts:[空格]值user模块,创建一个用户 参数:statestate: presentansible-doc -s user 范例ansible-doc user 范例 user:name: johnd comment: John Doe uid: 1040 group: admin 使用vim写yml文件hosts 跟inventory清单里的一台主机,跟主机组 多个主机之间或者多个组之间用逗号隔开,隔开比如web,db,lamp | all所有清单all 即 ansible.cfg中inventory所有主机yml写完后,通过ansible-playbook命令运行ansible-playbook -i /tmp/invenoty2.py 使用指定清单新建一个剧本first.ymlname: This is first yml filehosts: web,dbtasks: - name: create user upnange123 user: name: upnange123 state: present uid: 1800 通过ansible-playbook --syntax-check first.yml进行语法检查playbook: first.yml 语法通过执行完playbook后随后进行验证,通过add-hocansible 组名 | 主机名 -m shell | command 都可以 -a 执行一些传统命令command 直接对接shell环境 /bin/bash | /bin/false格式不对检查报错ansible-playbook --syntax-check first.ymlERROR! We were unable to read either as JSON nor YAML, these are the errors we got from each:JSON: Expecting value: line 1 column 1 (char 0)Syntax Error while loading YAML. did not find expected '-' indicator剧本增加模块name: This is first yml filehosts: web,dbtasks: - name: create user upnange123 user: name: upnange123 state: present uid: 1800 - name: verify upnange123 is exist shell: cmd: tail -1 /etc/passwd ansible-playbook first.yml 执行脚本PLAY [This is first yml file] 读取yml文件剧本TASK [Gathering Facts] *收集事实变量ok: [serverc]ok: [serverb]ok: [servera]ok: [serverd]TASK [create user upnange123] 执行第一个任务,创建用户changed: [serverb]changed: [serverc]changed: [servera]changed: [serverd]TASK [verify upnange123 is exist] **执行第二个任务changed: [serverc]changed: [serverd]changed: [servera]changed: [serverb]PLAY RECAP *回放执行过程servera : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverb : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverc : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverd : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0ansible 幂等性ok 绿色 成功 没有对结果产生影响changed 黄色 成功了对结果产生影响ignored 任务执行失败 忽略找手感环节1:最开始的playbook:找到你的手感vim first.yml---(回车)(空格)(空格)-(空格)name:(空格)xxxxxxxx(回车)直接写hosts:(空格)xxx(回车)直接写tasks:(回车)直接写-(空格)name:(空格)xxxxxxxx(回车)直接写模块比如shell:(回车)直接写参数比如cmd:(空格)xxxxxxxx(回车)多个参数,直接写参数比如create:(空格)xxxxxxxx(回车)到此,一个play就结束了 多个play,先进行语法检测,多用复制粘贴主机列表项方式name: xxxhosts: - web - dbtasks: - name: xxx shell: xxx tasks列表项方式,直接 -模块name: This is first yml filehosts: web,dbhosts: - web - db tasks: - name: create user upnange123 user: name: upnange123 state: present uid: 1800 - name: verify upnange123 is exist shell: cmd: tail -1 /etc/passwd - user: name: upnange123 state: absent remove: yes 最终验证:ansible all -m shell -a "id upnange123"语法检测ansible-playbook --syntax-check first.yml进行语法检查-C 预运行,并不真正运行,只是模拟运行 ansible-playbook -C 7.yml排错 ansible-playbook 7.yml -v-v 显示较为详细任务输出-vv 任务所在行数-vvv 环境用到的包-vvvv 任务是通过哪个用户的身份去运行-vv平时用的多找手感2:对 YAML 格式的识别以及格式上的自动对齐vi ~/.vimrcautocmd FileType yaml setlocal ai ts=2 sw=2 et写playbook时开两个窗口,一个vim xxx.yml 另一个ansible-doc xxx需要熟悉常用模块的参数经典部署httpd1、传统命令方式部署:1.1 安装单节点 servera yum install httpd1.2 启动服务器 systemctl enable --now httpd1.3 搞站点website /var/www/html echo "xxx" > index.html1.4 改端口httpd.conf apache 80-80801.5 重启httpd systemctl restart httpd1.6 发现index.html 无法通过firefox访问 selinux端口策略、安全性上下文,firewalld查看端口开放2、ansible不是httpd2.1 yum模块2.2 service模块2.3 copy模块2.4 lineinfile模块2.5 service模块2.6 copy | file setype参数,firewalld模块举例name: deploy httpdhosts: servera,serverbtasks: - name: install httpd package yum: name: httpd state: present - name: Start service httpd, if not started service: name: httpd state: started enabled: yes - name: copy index.html copy: content: 'upnange666' dest: /var/www/html/index.html owner: apache group: apache mode: '0444' setype: httpd_sys_content_t - name: modify httpd.conf port 8080 lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: Listen 8080 - name: restart httpd service service: name: httpd state: restarted - name: verify firewalld service is started service: name: firewalld state: started enabled: yes - name: add firwalld policy tcp 8080 firewalld: port: 8080/tcp permanent: yes immediate: yes state: enabled验证[student@workstation ansible]$ curl http://serverb:8080upnange666[student@workstation ansible]$playbook中的远程用户ansible 控制节点ansible.cfgremote_user=student | devops被管理节点又devops用户 | devops sudo1、被管理环境要有用户2、要有sudo权限ansible.cfgremote_user=devops除了bastion之外,其他的跑ansible任务没有问题觉得bastion用devops不太方便 ,没有用户,调用已经存在的sudo用户抛开全局默认的远程用户,单独执行yml针对bastion配置student用户执行grep -v -e "#" -e "^$" ansible.cfg 查看配置方法举例name: create user devops for bastionhosts: bastionremote_user: studentbecome: Truebecome_method: sudobecome_user: roottasks: - name: creat user user: name: devops state: present 该报错跟用户是否存在有关:[student@workstation ansible]$ ansible bastion -m shell -a "id student"bastion | UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: devops@bastion: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}该报错表示devops用户没有加入sudo:[student@workstation ansible]$ ansible bastion -m ping bastion | FAILED! => {"msg": "Missing sudo password"}变量命名字母开头,字母、数字、下划线变量 在不同的位置进行调用和使用1、playbook中 优先级局中 通过vars定义变量 也可以通过vars_files 将一个外部的yml作为变量的文件使用2、执行playbook 通过ansible-playbook -e 使用 优先级最高3、inventory清单中指定主机组变量优先级排序一、在playbook中应用变量name: deploy httpdhosts: servera,serverbvars: pack_name: httpd service_name: httpd service_port: 8080tasks: - name: install "{{ pack_name }}" package yum: name: "{{ pack_name }}" state: present - name: Start service "{{ service_name }}", if not started service: name: "{{ service_name }}" state: started enabled: yes - name: copy index.html copy: content: 'upnange666' dest: /var/www/html/index.html owner: apache group: apache mode: '0444' setype: httpd_sys_content_t - name: modify httpd.conf port "{{ service_port }}" lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: Listen "{{ service_port }}" - name: restart "{{ service_name }}" service service: name: "{{ service_name }}" state: restarted - name: verify firewalld service is started service: name: firewalld state: started enabled: yes - name: add firwalld policy tcp "{{ service_port }}" firewalld: port: "{{ service_port }}/tcp" permanent: yes immediate: yes state: enabled 二、创建外部vars变量文件[student@workstation vars]$ cat ~/ansible/vars/httpd.ymlpack_name: httpdservice_name: httpdservice_port: 8080引用外部vars变量文件[student@workstation ansible]$ cat deploy-httpd.ymlname: deploy httpdhosts: servera,serverbvars_files: - vars/httpd.ymltasks:[student@workstation ansible]$ cat remove_httpd.ymlname: remove httpdhosts: servera,serverbvars_files: - vars/httpd.ymltasks: - name: remove yum: name: "{{ pack_name }}" state: absent 三、在playbook运行时指定变量名,优先级最高ansible-playbook -e 变量名=变量值 -e 变量名=变量值[student@workstation ansible]$ ansible-playbook remove_httpd.yml -e pack_name=redisPLAY [remove "redis"] *TASK [Gathering Facts] **ok: [serverb]ok: [servera]四、在清单中对单一主机指定变量,清单中优先级比playbook中定义vars | vars_file 要低[student@workstation ansible]$ cat inventorybastion[web]servera pack_name=redis在清单中对主机组中所有主机设置变量[student@workstation ansible]$ cat inventorybastion[web]serveraserverb[db]servercserverd[web:vars]pack_name=vsftp优先级1、ansible-playbook -e 优先级最高2、vars | vars_file 优先级居中3、清单变量优先级最低debug信息输出[student@workstation ansible]$ cat regist.ymlname: register copy modulehosts: webtasks: - name: copy output copy: src: upnange.txt dest: /opt/ mode: 4777 register: upnange - name: debug output debug: #msg: "upnange.txt copy sucess!" var: upnange 变量类型字符串数组[student@workstation vars]$ cat users.ymlusers: upwen: uid: 1888 user-name: upwen2022 shell: /bin/bash upnange: uid: 1900 user-name: upnange666 shell: /bin/nologin取值users.upwen.user_nameusers'upnange'需要调试![student@workstation ansible]$ cat useradd.ymlname: useradd userhosts: webvars_files: - vars/users.ymltasks: - name: create user "{{ users.upwen.user_name }}" user: name: "{{ users.upwen.user_name }}" uid: "{{ users.upwen.uid }}" shell: "{{ users.upwen.shell }}" state: present - name: create user "{{ users['upnange']['user_name'] }}" user: name: "{{ users['upnange']['user_name'] }}" uid: "{{ users['upnange']['uid'] }}" shell: "{{ users['upnange']['shell'] }}" state: present[student@workstation ansible]$ cat vars/users.ymlusers: upwen: uid: 1888 user_name: upwen2022 shell: /bin/bash upnange: uid: 1900 user_name: upnange666 shell: /bin/nologin 过滤器 用来设置密文密码password: "{{ 'redhat' | password_hash('sha512') }}"举例name: useradd userhosts: webvars_files: - vars/users.ymltasks: - name: create user "{{ users.upwen.user_name }}" user: name: "{{ users.upwen.user_name }}" uid: "{{ users.upwen.uid }}" shell: "{{ users.upwen.shell }}" state: present password: "{{ 'redhat' | password_hash('sha512') }}" - name: create user "{{ users['upnange']['user_name'] }}" user: name: "{{ users['upnange']['user_name'] }}" uid: "{{ users['upnange']['uid'] }}" shell: "{{ users['upnange']['shell'] }}" state: present password: "{{ 'redhat' }}"验证,不使用passwd过滤器的显示为明文[student@workstation ansible]$ ansible web -m shell -a "tail -4 /etc/shadow"servera | CHANGED | rc=0 >>upwen2022:!!:19252:0:99999:7:::upnange666:!!:19252:0:99999:7:::upwen2033:$6$.bNwaSnhAOaSFJs1$GOVFXHv4TbSmJQwP676gEGnHEtHE.bTHnOBR7KyHal5jD/125j6yGfok5wOD0SU1it.og01i1YjWZ2WeQCwjj0:19252:0:99999:7:::upnange667:redhat:19252:0:99999:7:::serverb | CHANGED | rc=0 >>upwen2022:!!:19252:0:99999:7:::upnange666:!!:19252:0:99999:7:::upwen2033:$6$4jdDWFLp3bfV0aV3$PXLKRGG4ccsH4NaXWfQXmKaylBqGu5ItITw8wUOmsLbbctkx9lF/4SHiSfAEODXI35YvmGXIR/Zmpvt5L5uXq.:19252:0:99999:7:::upnange667:redhat:19252:0:99999:7:::管理机密定义管理机密ansible vault 创建、编辑、加密、解密、查看文件创建新的加密yml文件ansible-vault create vault1.yml编辑edit查看view指定密码运行--ask-vault-pass通过文件读取密码--vault-password-file=/xx.txt通过ansible.cfg配置密码,配置后全部操作免密第140行,取消注释修改vault_password_file = /xx先创建再加密ansible-vault encrypt useradd.yml解密ansible-vault decrypt useradd.yml更新密码rekey管理事实:1、收集事实2、关闭开启事实收集gather_facts: no | yes3、收集事实变量ansible servera -m setup4、魔法变量ansible localhost -m debug -a "var=hostvars.localhost"ansible实施与控制简单循环 loop "{ item }}"示例[student@workstation ansible]$ cat loop1.ymlname: create userhosts: webtasks: - name: loop user user: name: "{{ item }}" state: present loop: - upwen12 - upwen13 - upwen14 - upwen15 when条件魔法变量事实变量rc值 result code num变量 == 值变量 != 值变量 is defined变量 is not definedwhen举例[student@workstation ansible]$ cat when1.ymlname: when testhosts: web,db,balancertasks: - name: install haproxy on balancer group yum: name: haproxy state: latest when: inventory_hostname in groups.web - name: install redis on db group yum: name: redis state: latest when: inventory_hostname in groups['db'] rc举例[student@workstation ansible]$ cat rc.ymlname: rchosts: webtasks: - name: rpm shell: cmd: rpm -qa | grep -i haproxy register: upnange - name: debug debug: var: upnange.rc when结合rc举例[student@workstation ansible]$ cat rc.ymlname: rchosts: webtasks: - name: rpm shell: cmd: rpm -qa | grep -i haproxy register: upnange - name: remove yum: name: haproxy state: absent when: upnange.rc == 0 - name: debug debug: var: upnange.rc 验证ansible web -m shell -a "rpm -qa | grep -i haproxy"程序处理启动服务 | 重启服务 handlers实现必须对应一个play模块 对应的任务黄色changed 实现handlersansible幂等性 黄色changedhandlers 整个playbook中最后才去运行1、install httpd 触发handlers2、搞网站3、改主配置文件端口 80804、防火墙策略最后一步 handlers start | restart 服务 curl | firefox 举例upnange666[student@workstation ansible]$ cat handlers.ymlname: deploy httpdhosts: servera,serverbvars:pack_name: httpdservice_name: httpdservice_port: 8080vars_files: - vars/httpd.ymltasks: - name: install "{{ pack_name }}" package yum: name: "{{ pack_name }}" state: present notify: - restart "{{ service_name }}" service - name: copy index.html copy: content: 'upnange666' dest: /var/www/html/index.html owner: apache group: apache mode: '0444' setype: httpd_sys_content_t - name: modify httpd.conf port "{{ service_port }}" lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: Listen "{{ service_port }}"handlers: - name: restart "{{ service_name }}" service service: name: "{{ service_name }}" state: restarted - name: verify firewalld service is started service: name: firewalld state: started enabled: yes - name: add firwalld policy tcp "{{ service_port }}" firewalld: port: "{{ service_port }}/tcp" permanent: yes immediate: yes state: enabled验证[student@workstation ansible]$ curl http://servera:8080upnange666任务控制,失败处理需修改验证[student@workstation ansible]$ cat rremove_httpd.ymlname: remove "{{ pack_name }}"hosts: servera,serverbvars_files: - vars/httpd.ymltasks: - name: remove yum: name: http state: absent ignore_errors: yes handlers强制通过[student@workstation ansible]$ cat deploy-httpd.ymlname: deploy httpdhosts: servera,serverbforce_handlers: yes指定失败条件failed_when:举例:[student@workstation ansible]$ cat failed_when.ymlname: failed_whenhosts: webtasks: - name: excute /bin/false command: /bin/false register: upnange failed_when: upnange.rc != 1 - name: debug debug: var: upnange.rc验证:TASK [debug] ok: [servera] => {"upnange.rc": "1"}ok: [serverb] => {"upnange.rc": "1"}ansible 块与错误处理block | rescue | always首先在block跑play任务,成功-》进入always中运行play任务不成功-》进入rescue中,执行rescue里的play任务,再去走always举例[student@workstation ansible]$ cat block_rescure_always.ymlname: block & rescure & alwayshosts: webtasks: - name: block & rescure & always block: - name: vaerify upnange shell: id -un upnange rescue: - name: create user upnange user: name: upnange state: present always: - name: mofity upnange user groups is wheel user: name: upnange groups: wheel append: yes验证[student@workstation ansible]$ ansible web -m shell -a "id upnange"serverb | CHANGED | rc=0 >>uid=1906(upnange) gid=1906(upnange) groups=1906(upnange),10(wheel)servera | CHANGED | rc=0 >>uid=1906(upnange) gid=1906(upnange) groups=1906(upnange),10(wheel)在被管理节点执行lineinfile:blockinfile:创建写入ansible web -m blockinfile -a "path=/opt/up.txt create=true block='up666'"清空内容[student@workstation ansible]$ ansible web -m blockinfile -a "path=/opt/up.txt state=absent"sefcontext: selinux模块stat:jinja2模板模板 xxx.j2 文件名 使用事实变量 | 魔法变量通过template模块 src参数指定xxx.j2 dest= ansible被管理节点中的一个目标在被管理节点中可以输出 自己的事实变量的内容 servera fqdn ip kernel也可以在servera输出 别人的事实变量的值servera | b | c /etc/hosts文件通过jinja2 获取配合循环for控制ifjinja2语法调用变量: {{ ansible_facts.fqdn }} ansible servera -m setup 输出servera的事实变量循环:{{% for xxxx %}}中间贯穿变量的使用 {{% endfor %}}结合事实变量xx.j2welcome to vist {{ ansible_facts.fqdn }}结合魔法变量xx.j2也可以这样写:[student@workstation ansible]$ cat for.j2 {% for upnange in groups['all'] %} {{ hostvars[upnange].ansible_facts.default_ipv4.address }} {{ hostvarsupnange['fqdn'] }} {{ hostvarsupnange['hostname'] }} {% endfor %}管理大项目 CMDB 配置管理数据库动态清单演示 动态清单启动环境[student@workstation ansible]$ lab projects-inventory startSetting up workstation for lab exercise work:· Verifying Ansible installation.............................. SUCCESS · Creating working directory.................................. SUCCESS · Deploying ansible.cfg....................................... SUCCESS[student@workstation ansible]$ cd ~[student@workstation ~]$ cd projects-inventory/[student@workstation projects-inventory]$ lltotal 4-rw-r--r--. 1 student student 33 Sep 18 09:39 ansible.cfg下载脚本wget http://materials.example.com/labs/projects-inventory/inventorya.pywget http://materials.example.com/labs/projects-inventory/inventoryw.pychmod +x *.pyansible -i ./inventorya.py servera --list-hosts./inventorya.py --list配置并行[student@workstation ansible]$ cat ansible.cfg | grep forksforks = 5滚动更新,防止同时停止服务serial: 1位置在hosts下一行包含include和导入import,引申roles角色把yml拆分多个小的yml安装:install.yml防火墙:firewalld.yml管理服务:service.ymlimport 静态操作,解析剧本时对所有import静态处理include动态操作,执行playbook时进行处理install.yml 负责主要是安装的功能service.yml 负责主要是服务管理的功能注意,不要写hosts总体yml project1.yml 写hostsimport install.ymlinclude service.yml举例[student@workstation ansible]$ cat install.ymlname: install packageyum: name: vsftpd state: latest[student@workstation ansible]$ cat service.ymlname: service manageservice: name: vsftpd state: started enabled: yes[student@workstation ansible]$ cat porject1.ymlname: project1hosts: dbtasks: - name: import install vsftpd import_tasks: install.yml - name: include service vsftpd include_tasks: service.yml 验证[student@workstation ansible]$ ansible-playbook porject1.ymlPLAY [project1] *TASK [Gathering Facts] **ok: [serverd]ok: [serverc]TASK [install package] **changed: [serverd]changed: [serverc]TASK [include service vsftpd] *included: /home/student/ansible/service.yml for serverc, serverdTASK [service manage] *changed: [serverc]changed: [serverd]PLAY RECAP **serverc : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverd : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0通过角色简化playbookroles角色通过roles 标准化的目录结构目录1 子目录: var 子目录:template目录1 变成一个角色 使用 任何的yml 不带hosts写一个用于调用该角色的一个yml 这个yml文件指定hosts[student@workstation ansible]$ cat ansible.cfg | grep rolesadditional paths to search for roles in, colon separatedroles_path = /home/student/ansible/roles初始化roles[student@workstation roles]$ ansible-galaxy init apacheRole apache was created successfully[student@workstation roles]$ lltotal 0drwxrwxr-x. 10 student student 154 Sep 18 10:22 apache[student@workstation roles]$ tree apache/apache/├── defaults│ └── main.yml├── files├── handlers│ └── main.yml├── meta│ └── main.yml├── README.md├── tasks│ └── main.yml├── templates├── tests│ ├── inventory│ └── test.yml└── vars └── main.yml角色叫apache 里面包含主体的yml tasks目录下 hadlers 目录用于触发器 vars存放变量文件 templates j2角色如何去做:1、自定义2、系统角色3、从ansible galaxy 网站 下载 使用1、自定义 ansible-galaxy init apache自己从头到尾编写2、系统角色 直接安装即可 写好调用即可3、从ansible galaxy网站 通过anisble-galaxy install 方式 指定角色压缩包 写好调用的角色 配置好hosts系统角色ansible控制节点[student@workstation roles]$ sudo yum install rhel-system-roles -y[student@workstation roles]$ ansible-galaxy list/usr/share/ansible/roleslinux-system-roles.certificate, (unknown version)linux-system-roles.crypto_policies, (unknown version)linux-system-roles.ha_cluster, (unknown version)linux-system-roles.kdump, (unknown version)linux-system-roles.kernel_settings, (unknown version)linux-system-roles.logging, (unknown version)linux-system-roles.metrics, (unknown version)linux-system-roles.nbde_client, (unknown version)linux-system-roles.nbde_server, (unknown version)linux-system-roles.network, (unknown version)linux-system-roles.postfix, (unknown version)linux-system-roles.selinux, (unknown version)linux-system-roles.ssh, (unknown version)linux-system-roles.sshd, (unknown version)linux-system-roles.storage, (unknown version)linux-system-roles.timesync, (unknown version)linux-system-roles.tlog, (unknown version)rhel-system-roles.certificate, (unknown version)rhel-system-roles.crypto_policies, (unknown version)rhel-system-roles.ha_cluster, (unknown version)rhel-system-roles.kdump, (unknown version)rhel-system-roles.kernel_settings, (unknown version)rhel-system-roles.logging, (unknown version)rhel-system-roles.metrics, (unknown version)rhel-system-roles.nbde_client, (unknown version)rhel-system-roles.nbde_server, (unknown version)rhel-system-roles.network, (unknown version)rhel-system-roles.postfix, (unknown version)rhel-system-roles.selinux, (unknown version)rhel-system-roles.ssh, (unknown version)rhel-system-roles.sshd, (unknown version)rhel-system-roles.storage, (unknown version)rhel-system-roles.timesync, (unknown version)rhel-system-roles.tlog, (unknown version)/etc/ansible/roles[student@workstation roles]$ cd /usr/share/ansible/roles/[student@workstation roles]$ lslinux-system-roles.certificate rhel-system-roles.certificatelinux-system-roles.crypto_policies rhel-system-roles.crypto_policieslinux-system-roles.ha_cluster rhel-system-roles.ha_clusterlinux-system-roles.kdump rhel-system-roles.kdumplinux-system-roles.kernel_settings rhel-system-roles.kernel_settingslinux-system-roles.logging rhel-system-roles.logginglinux-system-roles.metrics rhel-system-roles.metricslinux-system-roles.nbde_client rhel-system-roles.nbde_clientlinux-system-roles.nbde_server rhel-system-roles.nbde_serverlinux-system-roles.network rhel-system-roles.networklinux-system-roles.postfix rhel-system-roles.postfixlinux-system-roles.selinux rhel-system-roles.selinuxlinux-system-roles.ssh rhel-system-roles.sshlinux-system-roles.sshd rhel-system-roles.sshdlinux-system-roles.storage rhel-system-roles.storagelinux-system-roles.timesync rhel-system-roles.timesynclinux-system-roles.tlog rhel-system-roles.tlogtimesync时间同步的系统角色 复制到 [student@workstation roles]$ cp -av rhel-system-roles.timesync/ /home/student/ansible/roles/系统角色,写好调用timesync角色的ymlExample PlaybookInstall and configure ntp to synchronize the system clock with three NTP servers:- hosts: targets vars: timesync_ntp_servers: - hostname: foo.example.com iburst: yes - hostname: bar.example.com iburst: yes - hostname: baz.example.com iburst: yes roles: - rhel-system-roles.timesync实验环境ntp在classroom中 classroom.example.comhosts: webvars: timesync_ntp_servers:- hostname: classroom.example.com iburst: yesroles:rhel-system-roles.timesync复制到vim中需要先进入粘贴模式:set paste验证结果ansible web -m shell -a "chronyc sources -v"timedatectl关注一个点:系统角色已经提前写好 tasks目录下的main.yml时角色主题,不需要 ansible-playbook main --syntax-check只检查自己调用角色的yml自定义角色变量-vars目录jinja2模板-timplates目录handlers触发器-handlers目录自定义角色:ansible-galaxy init apache变量:[student@workstation apache]$ cat ../../var/httpd.yml pack_name: httpdservice_name: httpdservice_port: 8080apache角色中的vars目录中的main.yml[student@workstation vars]$ cat main.ymlvars file for apachepack_name: httpdservice_name: httpdservice_port: 8080jinjia2模板:[student@workstation vars]$ cat ../../../upnange.j2 welcome to vist {{ ansible_facts.fqdn }} {{ ansible_facts['fqdn'] }} on {{ ansible_facts.default_ipv4.address }}apache角色中的templates目录中的main.yml[student@workstation templates]$ cp -p /home/student/ansible/upnange.j2 .handlers触发器:apache角色中的hanlders目录中的main.yml - name: start {{ service_name }} service service: name: "{{ service_name }}" state: started enabled: yes [student@workstation handlers]$ cat main.ymlhandlers file for apachename: start {{ service_name }} serviceservice: name: "{{ service_name }}" state: started enabled: yesapache角色中的tasks目录中的main.yml 存放主体的yml[student@workstation tasks]$ cat main.ymltasks file for apachename: install {{ pack_name }} packageyum: name: "{{ pack_name }}" state: presentname: template index.htmltemplate: src: upnange.j2 dest: /var/www/html/index.html owner: apache group: apache mode: 0444 setype: httpd_sys_content_tname: modify httpd.conf port {{ service_port }}lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: line: "Listen {{ service_port }}"notify:start {{ service_name }} servicename: add firewall policy tcp {{ service_port }}firewalld: port: "{{ service_port }}/tcp" permanent: yes immediate: yes state: enabled调用apache角色的yml[student@workstation tasks]$ vim /home/student/ansible/apache.ymlname: deploy apachehosts: webroles:apacheansible-galaxygalaxy.ansible.comrz -E xxsz -E xx上传下载ansible-galaxyhttps://galaxy.ansible.com/community-aws-1.5.0.tar.gz 上传ansible控制节点rz -E community-aws-1.5.0.tar.gz 直接上传到workstationsz -E xxxx.txtF0主机的/content目录下新建roles目录 上传通过浏览器访问http://content.example.com/roles/workstation wget http://content.example.com/roles/community-aws-1.5.0.tar.gz写一个yml 指定角色的来源 并且角色名称[student@workstation roles]$ cat require.ymlsrc: http://content.example.com/roles/community-aws-1.5.0.tar.gzname: aws[student@workstation roles]$ ansible-galaxy install -r require.yml -p /home/student/ansible/rolesdownloading role from http://content.example.com/roles/community-aws-1.5.0.tar.gzextracting aws to /home/student/ansible/roles/awsaws was installed successfullyansible 故障排除配置ansible日志[student@workstation ansible]$ cat ansible.cfg | grep log_pathlog_path = /var/log/ansible.log自动化模块copy | file | fetch管理类模块yum_repository自动化模块:copy | file | fetch | yum | user | group | lineinfile | blockinfile | stat | yum_repository | service | firewalld管理类模块:搭建YUM仓库gpgcheck=1 gpgkey=http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releasecsa rpm --import http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releaseansible all -m shell -a "rpm --import http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-release"rpm_key管理模块:[student@workstation ansible]$ cat yum_repository.ymlname: deploy yum repositoryhosts: alltasks:name: deploy yum repository baseosyum_repository: name: rh294_baseos description: 'This is rh294 BaseOS' file: rh294_baseos baseurl: http://content.example.com/rhel8.4/x86_64/dvd/BaseOS enabled: yes gpgcheck: yes gpgkey: http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releasename: deploy yum repository appstreamyum_repository: name: rh294_AppStream description: 'This is rh294 AppStream' file: rh294_AppStream baseurl: http://content.example.com/rhel8.4/x86_64/dvd/AppStream enabled: yes gpgcheck: yes gpgkey: http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releasename: import gpgkeyrpm_key: key: http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-release state: presentuser管理模块:name | uid | group私有组 | groups | append | home | state present absent | password + 过滤器 | expires 账户的过期时间 shadow 倒数第2列 19700101+useradd -e 密码的过期时间 42~60 90 : ansible all -m shell -a "chage -M xxxxx"it-manager | PM product manager | role 身份存储的管理模块:涉及到分区parted、文件系统filesystem、挂载mount (标准形式)LVM lvg lvol 传统命令:vgcreate -s 16M upnangevg /dev/vdb /dev/vdc2lvg 模块 1、先去创建转换pv pvcreate /dev/vdb2、vgcreatevgcreate -s 32M upnangevg /dev/vdc1lvg: - name: create upnangevg lvg: vg: upnangevg pvs: /dev/vdb pesize: 32 创建lv逻辑卷lvcreate -L xxG -n lv1 upnangevglvcreate -l xxxpe个数 -n lv1 upnangevglvol: - name: create lv1 in upnangevg lvol: vg: upnangevg size: 800m lv: lv1 创建文件系统:mkfs -t ext4 | mkfs.xfs /dev/upnangevg/lv1filesystem: - name: create filesystem ext4 filesystem: fstype: ext4 dev: /dev/upnangevg/lv1 挂载使用:涉及到开机自动挂载 /etc/fstab 随手写到该文件中mkdir -p /opt/dir1 && mount /dev/upnangevg/lv1 /opt/dir1 && vi /etc/fstab mount模块:state: mounted mount /dev/upnangevg/lv1 + vi /etc/fstab[student@workstation ansible]$ cat storage.ymlname: deploy lvmhosts: webtasks:name: create upnangevglvg: vg: upnangevg pvs: /dev/vdb pesize: 32mname: create lv1 in upnangevglvol: vg: upnangevg size: 800m lv: lv1name: create filesystem ext4filesystem: fstype: ext4 dev: /dev/upnangevg/lv1name: mount filesystemmount: path: /opt/dir1 src: /dev/upnangevg/lv1 fstype: ext4 state: mounted分区模块:partedparted 分区 set 分区号1 lvm on flagparted -l flag /dev/vdb1 = LVM[student@workstation ansible]$ cat parted.ymlname: parted /dev/vdb in db grouphosts: dbtasks:name: parted parted: device: /dev/vdb number: 1 part_end: 800MiB state: presentname: create file systemfilesystem: fstype: xfs dev: /dev/vdb1name: mountmount: path: /opt/dir2 src: /dev/vdb1 fstype: xfs state: presentcron计划任务:crontab -e -u upnangecrontab -e 当前用户(root | upnange)分 时 日 月 周 命令的全路径(考试跟全路径)10 17 * echo hellosystemctl restart crondcron模块:[student@workstation ansible]$ cat cron.ymlname: cronforce_handlers: yeshosts: webtasks:name: croncron: name: this is a job minute: "11" hour: "17" user: upnange job: "/usr/bin/echo hello" state: presentnotify:restart crond servicename: create filefile: path: /opt/file1 state: filehandlers:name: restart crond serviceservice: name: crond state: restarted[student@workstation ansible]$ ansible web -m shell -a "tail -10 /var/log/cron" RHCSA:1、磁盘分区结构 磁盘接口2、操作系统安装3、系统启动 init | systemd4、nmtui | nmcli | nmcli add | nmcli modify5、systemd功能 systemctl | systemctl --user6、目录操作mkdir rmdir stat文件操作 touch cp mv rm 链接文件 ln -s | ln7、系统信息收集 lscpu df du free timedatectl hostsnamectl tree find more less cat8、ssh 免密操作9、用户管理 userad | usermod | userdel-u -g -G -d -e -p -s -aG -m -r10、组 私有组 附加组 groupadd groupmod groupdel11、权限 chmod | chown chgrp特殊权限 suid | sgid | sticky ACL setfacl | getfacl12、软件 rpm -qa -qc -qlyum 仓库 yum | yum group xx yum module 模块流 contos-stream 13、磁盘管理 分区 fdisk gdisk parted14、lvm pv vg lv15、swap mkswap dd if=/dev/zero of=/xxx bs=xxx count=xxx16、VDO | stratis17、日志 rsyslog journald18、find19、容器podman20、tunedRHCE:ansibleansible.cfg 清单 静态 | 动态 CMDB配置管理数据库自动化模块过滤器playbook角色rolesDevOPS开发运维+自动化上午 RHCSA 满分300分 210通过 22道题 3个小时 前7天下午 RHCE 满分300分 210通过 16道题 4个小时 Ansible内容所有题 都是上机操作 V2.1版本 RHCSA+RHCE 最新版本RH124&134 RH294 平时上课练习环境考试练习环境:RHCE_exam vmware 虚拟机 CSA+CE 自带参考的评分脚本只要按照 样题解析文档 每一道题会包含知识点+解题步骤+最后要注意的细节 考试通过没有任何问题考试环境node1 node2 registry15个人考试node1.domain01.xxxxnode1.domain03.xxxx用户密码node1 root flectragnode2 自己破解强烈建议大家,考试的时候 涉及到创建用户、密码、YUM仓库地址 进行复制粘贴RHCSA 有两道根Podman 镜像服务器 admin redhat321重要测评信息重新引导node1 node2 ,保证所有操作开机启动运行,无法引导启动为零分RHCSA 3个小时考试时间 强烈建议大家1.5个小时昨晚 0.5小时检查RHCE 4个小时 2小时做完 0.5小时检查ansible-playbook --syntax-chenck xxx.yml练习环境通过快照切换考试环境F0主机 用户名kiosk 密码redhat三个组件红帽 考试题目虚拟机控制台终端node1 node2 虚拟机控制台会用consolenode1 一开始不叫node1 IP console root | flectrag nmcli修改IPnode2 叫node2 一开始进不去 root密码不知道 console 重启 -grub xxx考试通过终端terminal答题做题 按照样题解析全部做完26道题有可能CSA及CE每个部分有一道从没见过的题目按顺序做题node1题目1 配置主机 网络等通过nmcli配置网络通过hostnamectl修改主机名题目2 配置YUM仓库题目3 调试selinux题目4 创建用户组题目5 配置cron计划任务题目6 配置协作目录题目7 配置NTP题目8 atuofs题目9 配置/var/tmp/fstab权限题目10 配置用户账户题目11 查找文件题目12 查找字符串题目13 创建存档题目14 配置容器使其自动运行题目15 为容器配置持久存储题目16 可能从新题,可能从下面抽一道1、编写shell全路径执行2、设置用户密码过期时间3、设置用户默认权限4、设置sudonode2题目1 设置root密码题目2 配置你的系统以使用默认仓库题目3 调整逻辑卷大小题目4 添加swap交换分区题目5 创建逻辑卷题目6 创建VDO卷题目7 调优集测试参考评分exam-gradeRHCE16道题 4小时control node1 - 5 系统IP采用静态设置Ansible控制节点已经创建了用户账户gregAnsible必须通过greg普通用户登录control控制节点默认工作目录在普通用户家目录下的ansible中 yml ansible inventory roles /home/greg/ansible题目1 安装配置ansiblessh greg@control建议用vimhost_key_checking=False #考试时不需要配置,会扣一点分数考试时不需要配置被管理节点的sudo题目2 创建和运行Ansible考试中用全路径执行 /xxx.shGPGKEY导入题目3 安装软件包题目4 使用RHEL系统角色题目5 使用Ansible Galaxy安装角色题目6 创建和使用角色题目7 从Ansible Galaxy使用角色题目8 创建和使用逻辑卷题目9 生成主机文件题目10 修改文件内容题目11 创建web内容目录题目12 生成硬件报告题目13 创建密码库题目14 创建用户账户题目15 更新Ansible库的密钥题目16 配置cron作业参考评分 exam-grade
2022年09月18日
70 阅读
0 评论
0 点赞
2022-09-05
windows电脑使用小技巧记录笔记
1、关闭“幽灵”和“熔断”漏洞防护可恢复部分性能,有风险:https://www.grc.com/inspectre.htm2、Chrome开启多线程下载在地址栏输入 chrome://flags/,然后在搜索框中输入 Parallel downloading,选择enabled,重启Chrome3、如何在 Windows 上查看 HEIC 格式照片?https://www.microsoft.com/en-us/p/heif-image-extensions/9pmmsr1cgpwg?activetab=pivot:overviewtab4、win10自动登陆账号打开“设置-账户-登录选项”;取消“需要通过Windows Hello登录Microsoft账户”前面的复选框;点击桌面左下角的搜索栏,输入“netplwiz”,然后右侧点击“以管理员身份运行”;取消“要使用本计算机,用户必须输入用户名和密码”前面的复选框,并根据提示输入正确的账号名和密码;5、关闭休眠文件使用管理员运行cmd,执行:powercfg -h off 6、win10企业版无法访问共享文件夹首先我们按“window R键”打开运行窗口。在该窗口文本输入处输入“gpedit.msc”,这样本地组策略编辑器就能被启动。进入编辑器页面后,找到并点击页面左侧列的“计算机配置”。4.接着点击计算机配置下的“管理模板”选项。然后在管理模板下,依次点开“网络”-“Lanman工作站”。打开“Lanman工作站”后,在页面右侧列找到“启用不安全的来宾登录”。7.双击该选项,并选择“已启用”,再点击“确定”即可。7、WIN10 添加自动启动程序无效的解决方案将启动项目加入Hkey_local_machine\software\wow6432node\microsoft\windows\currentversion\run或放入开机启动目录 运行-shell:Common Startup8、WPS右键无新建doc、xls等快捷方式重置插件,重新注册9、使加域的计算机具备本地管理员权限使用本地管理员登录计算机,在本地管理员组中加入域用户10、win11右键管理员菜单样式j经典 reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve x新版 reg delete "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" /f11、命令行禁用UACC:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f 0为禁用 1为默认12、win11任务栏展开https://github.com/valinet/ExplorerPatcher/releases13、windows查看wifi无线信号强度netsh wlan show interfaces14、解决FTP因windows防火墙拦截的方法防火墙放行 windows-system32-svchost.exe(windows服务主进程)15、Windows 10共享提示“你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问。”启动不安全的来宾登录16、windows远程桌面登录提示内部错误Error Code 0x4微软论坛搜索https://social.technet.microsoft.com/Forums/en-US/f7ed9049-36a5-4def-90f8-14ebb70e6671/error-code-0x4新建注册表项Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server MaxOutstandingConnections DWORD 300017、一键修改远程桌面端口、开放防火墙、开启ping回显REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Remote Assistance" /v "fAllowToGetHelp" reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v "PortNumber" /t REG_DWORD /d "0xf3b6" /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v "PortNumber" /t REG_DWORD /d "0xf3b6" /f net stop TermService /y net start TermService /y netsh advfirewall firewall add rule name="secrdp" dir=in action=allow protocol=TCP localport=62390 netsh advfirewall firewall add rule name="_Ping" dir=in protocol=icmpv4 action=allow
2022年09月05日
244 阅读
0 评论
2 点赞
2022-08-30
0基础上手python编程,实践windows域用户过期邮件通知
全民制作人大家好,我是学习python两天半的练习生王忘杰,喜欢路由交换、linux、网络安全,开整!在此之前我并没有编程经验,对于python我花了半天时间看了www.runoob.com/python3的教程,看完第五节基本语法,发现python与bash脚本基本相同,因此安装完PyCharm后直接开始了代码编写。本文目标,0基础使用python语言完成对windows域用户超过60天未修改密码的进行邮件通知。一、代码思路1、获取windows域用户名、上次修改密码时间、邮箱2、使用python计算修改密码时间是否超过60天3、超过60天发送邮件通知4、使用异常处理语句,防止程序崩溃5、完整编译、定期执行、定期检查二、获取windows域用户信息百度查询,获得powershell命令Get-ADUser -Filter 'Name -like "*"' -Properties * Get-ADUser是powershell域管理的用户管理命令,此条命令可以列出全部域用户信息因为我们只需要用户名、上次修改密码时间和邮箱,因此使用powershell管道符加Select-Object筛选出name,passwordlastset,SamAccountName即可Get-ADUser -Filter 'Name -like "*"' -Properties * | Select-Object name,passwordlastset,SamAccountName此时的结果为这种格式1 11 admin 2021/11/30 22:15:20 admin test 2022/4/20 11:00:23 test 通过重定向将结果导出到本地,使用python进行后续工作,也可以直接用python执行powershell,看完本文你就懂了。Get-ADUser -Filter 'Name -like "*"' -Properties * | Select-Object name,passwordlastset,SamAccountName > 1.txt三、开始计算1、读取本地1.txt有困难,先百度,文章里所有代码都是按想法去百度的,使用open()函数打开本地文件f = open("C:\\Users\admin\Desktop\/1.txt", "r", encoding='utf-16')因为文本有很多行,所以需要使用readlines()函数来按行存储,此函数会以每一行为单位构建一个列表lines = f.readlines() print(lines)此时输出结果为['1\n', '\n', 'admin 2021/11/30 22:15:20 admin\n', 'test 2022/4/20 11:00:23 test \n']我们构建for循环来输出每一行的内容for line in lines: print(line)输出结果就变成了 admin 2021/11/30 22:15:20 admin test 2022/4/20 11:00:23 test 2、分割字符,计算时间我们使用strptime()函数来进行时间差计算,为此我们需要把每一行进行字符分割,提取有用的信息,而strptime()函数的日期格式是2021-11-30,与AD默认导出的2021/11/30不同,所以需要进行字符替换。此时我们for循环变成了for line in lines: x = line.replace("/", "-") y = x.split() time_1 = y[1] print(time)注意,因为文本里有空格,运行会报错,所以我们要做的是进行异常处理。 time_1 = y[1] IndexError: list index out of range使用try进行异常处理,修改for代码为for line in lines: try: x = line.replace("/", "-") y = x.split() time_1 = y[1] print(time_1) except: print("错误行")运行结果错误行 错误行 2021-11-30 2022-4-20for代码解释for line in lines: #每次for循环将lines中的一行赋予line try: #异常处理,正常的执行,错误的跳转except x = line.replace("/", "-") #使用replace()函数将line中的/替换为-,将结果赋予x,从[admin 2021/11/30 22:15:20 admin]替换为[admin 2021-11-30 22:15:20 admin] y = x.split() #使用split()将x使用空格分割,从[admin 2021-11-30 22:15:20 admin]分割为[admin][2021-11-30][22:15:20][admin] time_1 = y[1] #提取第二个字符,注意是0、1、2,所以1就是第二个字符 print(time_1) #打印2021-11-30,打印仅仅是为了从终端观察运行结果 except: print("错误行") #打印仅仅是为了从终端观察运行结果获取当前日期,使用time()函数,使用strftime()函数格式化为 年-月-日格式方便计算,此函数import time引用print(time.strftime("%Y-%m-%d", time.localtime()))3、计算时间差使用datetime计算时间差,from datetime import datetime引用,只有datetime格式化后的日期才能减出时间差for line in lines: try: x = line.replace("/", "-") y = x.split() time_1 = y[1] time_2 = time.strftime("%Y-%m-%d", time.localtime()) time_1 = datetime.strptime(time_1, "%Y-%m-%d") time_2 = datetime.strptime(time_2, "%Y-%m-%d") day = (time_2 - time_1).days #提取日期 print(day) #打印日期 except: print("错误行")运行结果273 1324、判断是否大于60天很简单了,一个if搞定print(day) if day > 60: #大于60天 day = str(day) #上面获取的day是int类型,必须转换成文本,否则无法运行,编辑器会提示错误 print('密码'+ day +'天未修改') #打印内容 else: print('未过期')运行结果密码273天未修改 密码132天未修改5、丰满内容,拼接出我们真正要的信息姓名、过期时间、邮箱,从y的第一位取出用户名,最后一位取出邮箱拼接起来 if day > 60: day = str(day) username = y[0] usermail = (y[3] + '@90apt.com') #拼接邮箱 print('用户 '+username+' 密码'+ day +'天未修改 邮箱为'+usermail) else: print('未过期')运行结果用户 admin 密码273天未修改 邮箱为admin@90apt.com 用户 test 密码132天未修改 邮箱为test@90apt.com四、发送邮件百度一下,直接加进去,发送邮件所需要的东西我们都有了用户名就是username,天数day,邮箱我们通过拼接usermail形成完整邮箱了使用SMTP单独发件测试,其实不需要知道内容,拿来用就行了from email.header import Header from email.mime.text import MIMEText mail_host = "smtp.mxhichina.com" # 设置服务器 mail_user = "admin@90apt.com" # 用户名 mail_pass = "passwd" # 口令 sender = 'admin@90apt.com' receivers = (usermail) # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 message = MIMEText('亲爱的 ' + username + ' 域用户 :\n\ 您的计算机域账户已经超过' + day + '天没有修改密码了', 'plain', 'utf-8') message['From'] = Header("域用户密码超期安全提醒", 'utf-8') message['To'] = Header(username, 'utf-8') subject = '域用户密码超期安全提醒' message['Subject'] = Header(subject, 'utf-8') try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号 smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print(username + "邮件发送成功") except smtplib.SMTPException: print("Error: 无法发送邮件")运行后列表里的人会收到邮件五、小优化邮件别发的太快,容易被封号,在for循环里加个time.sleep(3),运行一次等待3秒六、完整代码、编译、定时任务就算了,大家看完上面肯定就会了,随便写写就比我写更规范。编译,那不是百度一下就行,定时任务就更简单了,这里就不说了。七、最后不会写代码的网工不是好系统运维
2022年08月30日
202 阅读
0 评论
3 点赞
2022-08-12
windows/linux 部署weblogic
官方下载页面https://www.oracle.com/cn/middleware/technologies/fusionmiddleware-downloads.html一、Windows部署安装脚本需要jdk开发环境,而运行脚本需要jre运行环境安装jre,当前最新版本为Version 8 Update 341 https://www.java.com/zh-CN/download/安装jdk,安装脚本支持的jdk版本为17https://www.oracle.com/java/technologies/downloads/#java17下载最新版本weblogic Oracle WebLogic Server 14c (14.1.1.0)https://www.oracle.com/cn/middleware/technologies/fusionmiddleware-downloads.html解压weblogic.jar文件fmw_14.1.1.0.0_wls_lite_generic.jar添加java环境变量JAVA_HOME C:\Program Files\Java\jdk-17.0.4运行安装脚本,启动图形界面fmw_14.1.1.0.0_wls_lite_generic\Disk1\install\.ng.cmd全选模板输入密码这里jdk环境我选择jre配置直至完成启动脚本C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\startWebLogic.cmd登陆即可http://localhost:7001/console二、linux部署几乎一致三、其他修改weblogic调用的java路径Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin\setDomainEnv.sh setDomainEnv.cmd
2022年08月12日
109 阅读
0 评论
0 点赞
2022-08-12
Tomcat Alma linux 8 快速安装、升级
本次演示内容为使用Alma linux 8 快速部署Tomcat10.0.20版本,并快速升级为官网最新版本Tomcat10.0.23版本。一、安装准备1、查看系统版本当前版本为Almalinux8.6cat /etc/os-release NAME="AlmaLinux" VERSION="8.6 (Sky Tiger)" ID="almalinux"2、安装jdk建议使用dnf安装管理,方便升级,我这里选择安装最新的JDKdnf search jdk java-latest-openjdk.x86_64 : OpenJDK 18 Runtime Environment dnf install java-latest-openjdk二、安装tomcat1、下载历史版本http://archive.apache.org/dist/tomcat/tomcat-10/wget http://archive.apache.org/dist/tomcat/tomcat-10/v10.0.20/bin/apache-tomcat-10.0.20.tar.gz安装位置创建目录,并将Tomcat解压内容完整拷贝/usr/local/tomcat修改端口 conf/server.xml如默认监听的8080端口,改为8081<Connector port="8081" protocol="HTTP/1.1"配置环境变量/etc/profile 添加export TOMCAT_HOME=/usr/local/tomcat重新加载配置文件source /etc/profile启动Tomcat/usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started.关闭tomcat/usr/local/tomcat/bin/shutdown.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED登陆浏览器查看,注意开放防火墙对应端口三、升级Tomcat1、关闭tomcat/usr/local/tomcat/bin/shutdown.sh2、当发现当前版本漏洞时,需从官方下载升级Tomcat下载官方最新版https://tomcat.apache.org/wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.23/bin/apache-tomcat-10.0.23.tar.gz3、备份旧tomcatmv /usr/local/tomcat /usr/local/tomcat.bak/4、新建tomcat目录并把最新的tomcat包解压放入一般来说tomcat中配置文件为conf/server.xml程序文件在webapps演示文件在webapps/examples中其他自行修改的配置文件一并导入证书文件server.keystore注意将旧配置文件、程序文件、自定义配置、证书文件拷贝过来,并删除演示文件即可5、启动tomcat并测试
2022年08月12日
154 阅读
0 评论
1 点赞
2022-08-09
H3C华三交换机学习笔记
软件名称:HCL_Setup_V2.1.2发布日期:2021/1/15 0:00:00{anote icon="" href="https://www.h3c.com/cn/d_202101/1376321_30005_0.htm" type="secondary" content="下载地址"/} 模拟器bug注意!注意!不要调整模拟器内设备的内存,极易造成设备出bug,比如路由器内存调小后,自己ping自己都不通!https://zhiliao.h3c.com/questions/dispcont/8085“配置没问题,端口也up了,也ping不通自己,是因为hcl路由器或交换机的内存不能人为的调小于520M,调成350M就容易出问题”实际测试HCL_Setup_V3.0.1有bug,配置完不生效建议使用HCL_Setup_V2.1.2{dotted startColor="#ff6c6c" endColor="#1989fa"/}基础命令:进入系统视图<H3C>system-view 路由追踪[H3C]tracert 更改主机名[H3C]hostname Switch1 显示详细路由追踪信息 [H3C]ip ttl-expires enable [H3C]ip unreachables enable 保存[H3C]save 重启<H3C>reboot 查看接口信息[H3C]display interface brief 查看详细配置文件[H3c]display current-cohnfiguration 查看OSPF信息[SwitchA]display ospf peer verbose 查看SN序列号display device manuinfo 开启NTP时间同步,同步需要几分钟 [H3C]dis clock 04:06:38.180 UTC Sat 01/05/2013 [H3C]sntp enable [H3C]sntp unicast-server 172.16.21.246 [H3C]display sntp sessions SNTP server Stratum Version Last receive time 11.22.33.44 4 4 Sat, Jan 5 2013 4:07:40.856 查看交换机时间 [H3C]dis clock 08:11:36.223 UTC Mon 04/25/2022 关闭LLDP PVID检查 lldp ignore-pvid-inconsistency 打开LLDP PVID检查 undo lldp ignore-pvid-inconsistency 通过IP和MAC地址查找所在交换机1、查看本机IP和MAC地址以太网适配器 以太网: 描述. . . . . . . . . . . . . . . : Realtek PCIe GbE Family Controller 物理地址. . . . . . . . . . . . . : XX-XX-XX-XX-XX-XX IPv4 地址 . . . . . . . . . . . . : 172.XX.X.XXX(首选)2、登录VLAN网关,查看IP和MAC地址查看IP MAC对应关系dis arp | include 172.XX.X.XXX 172.XX.X.XXX xxxx-xxxx-xxxx 18 BAGG1 852 D查看MAC所在接口dis mac-addr | include xxxx-xxxx-xxxx xxxx-xxxx-xxxx 18 Learned BAGG1 Y3、查看接口下联交换机IP查看接口与端口绑定关系dis cu查看接口下lldp信息dis lldp n v4、依次登录下层交换机,最终确定接口所在交换机dis mac-addr | include xxxx-xxxx-xxxx xxxx-xxxx-xxxx 18 Learned GE1/0/43 Y 查看接口STP报文数量,其中G1/0/5口异常 <H3C>display stp tc -------------- STP slot 1 TC or TCN count ------------- MST ID Port Receive Send 0 Bridge-Aggregation1 1 34537 0 Bridge-Aggregation2 109 9708 0 GigabitEthernet1/0/1 10 458 0 GigabitEthernet1/0/2 29 1580 0 GigabitEthernet1/0/3 0 18213 0 GigabitEthernet1/0/4 0 18243 0 GigabitEthernet1/0/5 1496 8417 0 GigabitEthernet1/0/6 0 18225 0 GigabitEthernet1/0/7 423 17148 0 GigabitEthernet1/0/8 3 3856 0 GigabitEthernet1/0/9 36 18298 0 GigabitEthernet1/0/10 0 18277 0 GigabitEthernet1/0/17 185 34206 0 GigabitEthernet1/0/18 0 34535 0 GigabitEthernet1/0/20 0 206 0 GigabitEthernet1/0/21 0 34535 0 GigabitEthernet1/0/23 0 34536 0 GigabitEthernet1/0/24 0 3306 查看交换机日志 <H3C>dis logbuffer 查看邻居信息 <H3C>dis lldp neighbor-information list Chassis ID : * -- -- Nearest nontpmr bridge neighbor # -- -- Nearest customer bridge neighbor Default -- -- Nearest bridge neighbor System Name Local Interface Chassis ID Port ID XX GE1/0/1 70c6-ddb5-905e 70c6-ddb5-9087 XX GE1/0/2 6ce5-f71b-0754 GigabitEthernet1/0/28 XX GE1/0/3 9ce8-955a-b540 GigabitEthernet1/0/28 XX GE1/0/4 1cab-3479-2220 1cab-3479-2220 XX GE1/0/5 6ce5-f71b-904c GigabitEthernet1/0/28 H3C GE1/0/6 3c8c-4010-1f3e GigabitEthernet1/0/26 查看邻居详细信息 <S-151-04>dis lldp neighbor-information verbose LLDP neighbor-information of port 1[GigabitEthernet1/0/1]: LLDP agent nearest-bridge: LLDP neighbor index : 1 Update time : 46 days, 6 hours, 59 minutes, 31 seconds Chassis type : MAC address Chassis ID : 70c6-ddb5-905e Port ID type : MAC address Port ID : 70c6-ddb5-9087 Time to live : 121 Port description : GigabitEthernet1/0/28 Interface System name : S-178-01 System description : H3C Comware Platform Software, Software Version 7.1.070, Release 6328P03 H3C S5130S-28P-HPWR-EI Copyright (c) 2004-2021 New H3C Technologies Co., Ltd. Al l rights reserved. System capabilities supported : Bridge, Router, Customer Bridge, Service Bridge System capabilities enabled : Bridge, Router, Customer Bridge Management address type : IPv4 Management address : 169.254.144.94 Management address interface type : IfIndex Management address interface ID : 635 Management address OID : 0 dis process cpu 查看进程对于CPU的使用率。 dis process memory 查看进程对于内存使用率 dis cpu-usage 查看CPU使用率。 dis memory 查询内存使用率。 display fan 查看风扇 display power 查看电源 dis device 查看板卡状态 display logbuffer 查看设备日志 display environment 查看温度 dis counter rate inbound interface 查看接口进方向的使用率 dis counter rate outbound interface 查看接口出方向的使用率 dis int | inc rate 查看接口历史使用率 dis int | inc sec 查看接口历史使用率及出入方向的字节 dis int gi 1/0/1 查看接口最近300秒使用率 修改风扇旋转反向 fan prefer-direction slot 1 port-to-power 查看风扇状态 dis fan 清除配置,恢复出厂 <H3C>reset saved-configuration The saved configuration file will be erased. Are you sure? [Y/N]:y #选择Y确认 <H3C>reboot Start to check configuration with next startup configuration file, please wait.........DONE! Current configuration may be lost after the reboot, save current configuration? [Y/N]:n #N选择不保存 This command will reboot the device. Continue? [Y/N]:y #Y确认重启 关闭日志 关闭终端上下线日志分为以下几种情况 (1)通过console的方式登录时 info-center source STAMGR console deny info-center source WLANAUD console deny (2)通过telnet的方式登录时 info-center source STAMGR monitor deny info-center source WLANAUD monitor deny 以上两种情况互不影响。这两种方式只是在总控制台不显示用户上下线的日志信息,但设备的logbuffer里还是记录的,如果想要在logbuffer也不记录日志,需采取以下两种命令关闭: info-center source STAMGR logbuffer deny info-center source WLANAUD logbuffer deny 如关闭DHCP日志 info-center source DHCPS logbuffer deny {dotted startColor="#ff6c6c" endColor="#1989fa"/}二层端口模式 参考链接:https://blog.51cto.com/shyln/2087240 a)access端口 发送(从交换机内部往外发送): 带有vlan tag:删除tag后,发送 不带vlan tag:不可能出现 接收: 带有vlan tag:若该tag等于该access端口的pvid,则可以接收,进入交换机内部 不带vlan tag:添加该access端口的pvid,进入交换机内部 b)trunk端口(允许发送native VLAN数据的时候,可以不加tag) 发送(从交换机内部往外发送): 带有vlan tag:若tag等于该trunk端口的pvid,则删除tag后发送;否则保留tag直接发送 不带vlan tag:不可能出现 接收: 带有vlan tag:保留该tag,进入交换机内部 不带vlan tag:添加该trunk端口的pvid,进入交换机内部 c)hybrid端口(允许发送多个VLAN数据的时候,可以不加tag) 发送(从交换机内部往外发送): 带有vlan tag: 是否带tag进行发送,取决于用户配置(用户可以配置tagged list,untagged list) 不带vlan tag:不可能出现 接收: 带有vlan tag:保留该tag,进入交换机内部 不带vlan tag:添加该hybrid端口的pvid,进入交换机内部{dotted startColor="#ff6c6c" endColor="#1989fa"/}模拟傻瓜交换机 思路,创建全部vlan,端口启用untag。vlan 2 to 4000 #批量创建vlan interface GigabitEthernet1/0/1 #进入接口 port link-type hybrid #接口类型hybrid port hybrid vlan 1 to 4000 untagged #撕掉vlan标签{dotted startColor="#ff6c6c" endColor="#1989fa"/}配置telnet参考链接https://jingyan.baidu.com/article/1876c852517425890b1376d2.html给VLAN1配置IP[H3C-Vlan-interface1]ip address 192.168.56.254 255.255.255.0 [H3C-Vlan-interface1]quit配置VTY(Virtual Teletype Terminal)虚拟终端接口的认证方式 [H3C]user-interface vty 0 4 [H3C-line-vty0-4]authentication-mode scheme //进行本地或远端用户名和口令认证。即AAA认证 //关于认证,一共有三种认证方式 //password 本地口令认证; //scheme 本地或远端用户名和口令认证; //none 不认证; [H3C-line-vty0-4]quit 本地用户的创建与配置 [H3C]local-user admin //设置创建本地认证的用户名 [H3C-luser-manage-admin]password simple 123456 //设置明文密码,使用命令查看当前配置时 //密码会以哈希加密后显示 图3 [H3C-luser-manage-admin]authorization-attribute user-role level-15 #开启最高权限或authorization-attribute user-role network-admin [H3C-luser-manage-admin]service-type telnet //用户作用于telnet服务 [H3C-luser-manage-admin]quit [H3C]telnet server enable //开启telnet 服务 [H3C]save //保存配置 {dotted startColor="#ff6c6c" endColor="#1989fa"/}静态路由[R1]int g0/0 #进入接口或者vlan [R1-GigabitEthernet0/0]ip add 192.168.1.1 24 #设置接口IP [R1]ip route-static 192.168.2.0 24 192.168.1.2 #为目标网段设置网关{dotted startColor="#ff6c6c" endColor="#1989fa"/}普通DHCP配置路由1<H3C>sys #系统视图 [H3C]int g0/0 #进入接口 [H3C-GigabitEthernet0/0]ip add 192.168.1.1 24 #配置IP [H3C-GigabitEthernet0/1]int g0/1 [H3C-GigabitEthernet0/1]ip add 192.168.2.1 24路由2<H3C>sys [H3C]int g0/0 [H3C-GigabitEthernet0/0]ip add 192.168.2.2 24路由1[route1]dhcp server ip-pool 1 #设置DHCP地址池 [route1-dhcp-pool-1]network 192.168.0.1 mask 255.255.255.0 #地址范围为192.168.0.0/24网段的ip地址 [route1-dhcp-pool-1]gateway-list 192.168.0.1 #网关地址为192.168.0.1 [route1-dhcp-pool-1]dns-list 192.168.0.1 #DNS服务器地址也为192.168.0.1 注意:这里设置的是一个网段的范围,在这个地址范围里可能这里面的某些地址不能够被分配出去。比如说网关的地址和一些指定的设备的ip地址。 [route1]dhcp server forbidden-ip 192.168.0.1 192.168.0.2 #不允许网关地址和DNS地址192.168.0.1分配被出去 [route1]dhcp enable #启动DHCP服务{dotted startColor="#ff6c6c" endColor="#1989fa"/}ospf配置:参考:https://blog.51cto.com/14219797/2402420配置接口IP:SwitchB<H3C>sys #进入系统视图 [H3C]hostname SwitchB #主机名重命名 [SwitchB]vlan 200 进入vlan200 [SwitchB-vlan100]port g 1/0/1 #指定vlan200端口 [SwitchB-vlan100]quit [SwitchB]vlan 300 进入vlan300 [SwitchB-vlan200]port g 1/0/2 #指定vlan300端口 [SwitchB-vlan200]quit [SwitchB]inter vlan 200 #进入vlan200 [SwitchB-Vlan-interface100]ip add 10.1.1.2 24 #设定IP [SwitchB-Vlan-interface100]quit [SwitchB]inter vlan 300 #进入vlan300 [SwitchB-Vlan-interface200]ip add 10.2.1.1 24 #设定IP [SwitchB-Vlan-interface200]quit配置OSPF协议:<SwitchB> system-view #进入系统视图 [SwitchB] router id 10.2.1.1 #设定唯一标识 [SwitchB] ospf #进入ospf设置 [SwitchB-ospf-1] area 0 #配置区域0 [SwitchB-ospf-1-area-0.0.0.0] network 10.1.1.0 0.0.0.255 #通告网络,子网掩码为反码 [SwitchB-ospf-1-area-0.0.0.0] quit [SwitchB-ospf-1] area 2 #配置区域 [SwitchB-ospf-1-area-0.0.0.2] network 10.2.1.0 0.0.0.255 #通告网络 [SwitchB-ospf-1-area-0.0.0.2] quit [SwitchB-ospf-1] quitSwitchA 的 OSPF 邻居:[SwitchA]display ospf peer verbose OSPF Process 1 with Router ID 10.1.1.1 Neighbors Area 0.0.0.0 interface 10.1.1.1(Vlan-interface200)'s neighbors Router ID: 10.2.1.1 Address: 10.1.1.2 GR state: Normal State: Full Mode: Nbr is master Priority: 1 DR: 10.1.1.2 BDR: 10.1.1.1 MTU: 0 Options is 0x42 (-|O|-|-|-|-|E|-) Dead timer due in 31 sec Neighbor is up for 00:37:39 Authentication sequence: [ 0 ] Neighbor state change count: 6 BFD status: Disabled Area 0.0.0.1 interface 10.3.1.1(Vlan-interface100)'s neighbors Router ID: 10.3.1.2 Address: 10.3.1.2 GR state: Normal State: Full Mode: Nbr is master Priority: 1 DR: 10.3.1.1 BDR: 10.3.1.2 MTU: 0 Options is 0x42 (-|O|-|-|-|-|E|-) Dead timer due in 39 sec Neighbor is up for 00:36:50 Authentication sequence: [ 0 ] Neighbor state change count: 5 BFD status: DisabledSwitchA 的 OSPF 路由信息:[SwitchA]display ospf routing OSPF Process 1 with Router ID 10.1.1.1 Routing Table Topology base (MTID 0) Routing for network Destination Cost Type NextHop AdvRouter Area 10.2.1.0/24 2 Inter 10.1.1.2 10.2.1.1 0.0.0.0 10.3.1.0/24 1 Transit 0.0.0.0 10.1.1.1 0.0.0.1 10.1.1.0/24 1 Transit 0.0.0.0 10.2.1.1 0.0.0.0 Total nets: 3 Intra area: 2 Inter area: 1 ASE: 0 NSSA: 0SwitchC到SwitchD进行测试连通性:[SwitchC]ping 10.2.1.2 Ping 10.2.1.2 (10.2.1.2): 56 data bytes, press CTRL_C to break 56 bytes from 10.2.1.2: icmp_seq=0 ttl=253 time=1.651 ms 56 bytes from 10.2.1.2: icmp_seq=1 ttl=253 time=1.567 ms 56 bytes from 10.2.1.2: icmp_seq=2 ttl=253 time=1.465 ms 56 bytes from 10.2.1.2: icmp_seq=3 ttl=253 time=1.431 ms 56 bytes from 10.2.1.2: icmp_seq=4 ttl=253 time=2.635 msSwitchC到SwitchD进行路由追踪:[SwitchC]tracert 10.2.1.2 traceroute to 10.2.1.2 (10.2.1.2), 30 hops at most, 40 bytes each packet, press CTRL_C to break 1 10.3.1.1 (10.3.1.1) 1.438 ms 0.424 ms 0.418 ms 2 10.1.1.2 (10.1.1.2) 1.481 ms 1.221 ms 0.695 ms 3 10.2.1.2 (10.2.1.2) 1.073 ms 1.087 ms 0.923 ms{dotted startColor="#ff6c6c" endColor="#1989fa"/}VLAN隔离:参考链接:https://blog.51cto.com/14220513/2367688http://www.023wg.com/vlan/132.htmlhttp://www.h3c.com/cn/d_200809/615974_30005_0.htm配置SwitchA:<SwitchA> system-view #系统视图 [SwitchA] vlan 100 [SwitchA-vlan100] port ge1/0/2 #添加端口 [SwitchA-vlan100] quit [SwitchA] vlan 200 [SwitchA-vlan100] port ge1/0/3 #添加端口 [SwitchA-vlan100] quit [SwitchA] interface ge1/0/1 #进入端口 [SwitchA-GigabitEthernet1/0/1] port link-type trunk #设置trunk模式 [SwitchA-GigabitEthernet1/0/1] port trunk permit vlan 100 200 #允许VLAN100 200通过输入display vlan 100 和display vlan200 查看配置:[SwtichA]display vlan 100 VLAN ID: 100 VLAN type: Static Route interface: Not configured Description: VLAN 0100 Name: VLAN 0100 Tagged ports: GigabitEthernet1/0/1 Untagged ports: GigabitEthernet1/0/2 [SwtichA]display vlan 200 VLAN ID: 200 VLAN type: Static Route interface: Not configured Description: VLAN 0200 Name: VLAN 0200 Tagged ports: GigabitEthernet1/0/1 Untagged ports: GigabitEthernet1/0/3{dotted startColor="#ff6c6c" endColor="#1989fa"/}MSTP多生成树MSTP默认开启,可手动配置最佳路径参考链接:https://www.cnblogs.com/aqicheng/p/13824682.html每个交换机创建vlan10 vlan20[H3C]vlan 10 [H3C-vlan10]vlan 20 [H3C-vlan20]int g1/0/1 [H3C-GigabitEthernet1/0/1]port link-type trunk #所有接口设置trunk模式 [H3C-GigabitEthernet1/0/1]port trunk permit vlan all #允许所有vlan通过 [H3C-GigabitEthernet1/0/1]int g 1/0/2 [H3C-GigabitEthernet1/0/2]port link-type trunk [H3C-GigabitEthernet1/0/2]port trunk permit vlan all [H3C-GigabitEthernet1/0/2]quit [H3C]hostname sw3设置区域[sw3]stp region-configuration [sw3-mst-region]region-name h3c #区域命名 [sw3-mst-region]instance 1 vlan 10 #vlan10划入1组 [sw3-mst-region]instance 2 vlan 20 #vlan20划入2组 [sw3-mst-region]active region-configuration #激活配置 [sw3-mst-region]display this #查看以上配置 # stp region-configuration region-name h3c instance 1 vlan 10 instance 2 vlan 20 active region-configuration # return调整根桥[sw1]stp instance 1 root primary #sw1设置为组1的根桥 [sw2]stp instance 2 root primary #sw2设置为组2的根桥查看结果<sw1>display stp brief MST ID Port Role STP State Protection 0 GigabitEthernet1/0/1 DESI FORWARDING NONE 0 GigabitEthernet1/0/2 DESI FORWARDING NONE 0 GigabitEthernet1/0/3 DESI FORWARDING NONE 1 GigabitEthernet1/0/1 DESI FORWARDING NONE 1 GigabitEthernet1/0/2 DESI FORWARDING NONE 1 GigabitEthernet1/0/3 DESI FORWARDING NONE 2 GigabitEthernet1/0/1 ROOT FORWARDING NONE 2 GigabitEthernet1/0/2 DESI FORWARDING NONE 2 GigabitEthernet1/0/3 DESI FORWARDING NONE [sw2]display stp brief MST ID Port Role STP State Protection 0 GigabitEthernet1/0/1 ROOT FORWARDING NONE 0 GigabitEthernet1/0/2 DESI FORWARDING NONE 1 GigabitEthernet1/0/1 ROOT FORWARDING NONE 1 GigabitEthernet1/0/2 DESI FORWARDING NONE 2 GigabitEthernet1/0/1 DESI FORWARDING NONE 2 GigabitEthernet1/0/2 DESI FORWARDING NONE{dotted startColor="#ff6c6c" endColor="#1989fa"/}VRRP虚拟路由冗余协议参考链接:https://www.cnblogs.com/hukey/p/13071447.html配置心跳线双线冗余[SW1]int Bridge-Aggregation 1 #创建接口聚合 [SW1]int g1/0/2 [SW1-GigabitEthernet1/0/2]port link-aggregation group 1 #端口加入链路聚合 [SW1-GigabitEthernet1/0/2]int g1/0/3 [SW1-GigabitEthernet1/0/3]port link-aggregation group 1 [SW1]int Bridge-Aggregation 1 [SW1-Bridge-Aggregation1]port link-type trunk #端口允许所有vlan通过 [SW1-Bridge-Aggregation1]port trunk permit vlan all [SW2]int Bridge-Aggregation 1 #创建链路聚合 [SW2]int g1/0/2 [SW2-GigabitEthernet1/0/2]port link-aggregation group 1 #端口加入链路聚合 [SW2-GigabitEthernet1/0/2]int g1/0/3 [SW2-GigabitEthernet1/0/3]port link-aggregation group 1 [SW2]int Bridge-Aggregation 1 [SW2-Bridge-Aggregation1]port link-type trunk #端口允许所有vlan通过 [SW2-Bridge-Aggregation1]port trunk permit vlan all查看绑定状态[sw1]dis int Bridge-Aggregation bri Brief information on interfaces in bridge mode: Link: ADM - administratively down; Stby - standby Speed: (a) - auto Duplex: (a)/A - auto; H - half; F - full Type: A - access; T - trunk; H - hybrid Interface Link Speed Duplex Type PVID Description BAGG1 UP 2G(a) F(a) T 1配置vlanSW3对应SW2和SW1的两个端口配置trunk,对应客户机的端口配置vlan [SW3]vlan 10 [SW3-vlan10]port g1/0/1 [SW3]int range g1/0/2 to g1/0/3 [SW3-if-range]port link-type trunk [SW3-if-range]port trunk permit vlan 10 20 [SW1]vlan 10 #创建vlan [SW1-vlan10]vlan 20 #创建vlan [SW1-vlan0]int g1/0/1 [SW1-GigabitEthernet1/0/1]port link-type trunk [SW1-GigabitEthernet1/0/1]port trunk permit vlan 10 20 [SW1-GigabitEthernet1/0/1]int vlan 10 #进入vlan10 [SW1-Vlan-interface10]ip add 10.0.10.253 24 #设置IP [SW1-Vlan-interface10]int v20 #进入vlan20 [SW1-Vlan-interface20]ip add 10.0.20.253 24 #设置IP [SW1]dis ip int bri [sw1]dis ip int bri *down: administratively down (s): spoofing (l): loopback Interface Physical Protocol IP Address Description MGE0/0/0 down down -- -- Vlan10 up up 10.0.10.253 -- Vlan20 up up 10.0.20.253 -- [SW2]vlan 10 [SW2-vlan10]vlan 20 [SW2-vlan20]int g1/0/1 [SW2-GigabitEthernet1/0/1]port link-type trunk [SW2-GigabitEthernet1/0/1]port trunk permit vlan 10 20 [SW2-GigabitEthernet1/0/1]int v10 [SW2-Vlan-interface10]ip add 10.0.10.252 24 [SW2-Vlan-interface10]int v20 [SW2-Vlan-interface20]ip add 10.0.20.252 24 [SW2]dis ip int bri *down: administratively down (s): spoofing (l): loopback Interface Physical Protocol IP Address Description MGE0/0/0 down down -- -- Vlan10 up up 10.0.10.252 -- Vlan20 up up 10.0.20.252 --配置VRRP配置vlan10的vrrp [SW1]int v10 #进入vlan10 [SW1-Vlan-interface10]vrrp vrid 10 virtual-ip 10.0.10.254 #配置虚拟地址 [SW1-Vlan-interface10]vrrp vrid 10 priority 105 # 配置vrrp权重,默认为100 如果要设置master则大于100即 [SW1]track 10 int Bridge-Aggregation 1 # 配置心跳线为聚合链路 [SW2]int v10 [SW2-Vlan-interface10]vrrp vrid 10 virtual-ip 10.0.10.254 [SW2]track 10 int Bridge-Aggregation 1 配置vlan20的vrrp [SW1]int v20 [SW1-Vlan-interface20]vrrp vrid 20 virtual-ip 10.0.20.254 [SW1]track 20 int Bridge-Aggregation 1 #配置心跳线为聚合链路 [SW2]int v20 [SW2-Vlan-interface20]vrrp vrid 20 virtual-ip 10.0.20.254 [SW2-Vlan-interface20]vrrp vrid 20 priority 105 #设置为vlan20的master [SW2]track 20 int Bridge-Aggregation 1 #配置心跳线为聚合链路 [sw1]dis vrrp IPv4 virtual router information: Running mode : Standard Total number of virtual routers : 2 Interface VRID State Running Adver Auth Virtual pri timer(cs) type IP --------------------------------------------------------------------- Vlan10 10 Master 105 100 None 10.0.10.254 Vlan20 20 Backup 100 100 None 10.0.20.254 [sw2]dis vrrp IPv4 virtual router information: Running mode : Standard Total number of virtual routers : 2 Interface VRID State Running Adver Auth Virtual pri timer(cs) type IP --------------------------------------------------------------------- Vlan10 10 Backup 100 100 None 10.0.10.254 Vlan20 20 Master 105 100 None 10.0.20.254{dotted startColor="#ff6c6c" endColor="#1989fa"/}堆叠参考链接:CSDN博主「猫先生的早茶」的原创文章https://blog.csdn.net/qq_43017750/article/details/89323450注意!1、配置前必须移除两路由间连接线2、全部配置完成后,连线,次路由会自动重启master交换机#sys #interface range Ten-GigabitEthernet 1/0/49 to Ten-GigabitEthernet 1/0/52 #批量管理端口 #shutdown #关闭端口 #quit #irf member 1 priority 32 #配置irf成员优先级,32为最高,默认是1 #irf-port 1/1 #进入irf端口1/1 #port group interface Ten-GigabitEthernet 1/0/49 #加入当前irf端口 #port group interface Ten-GigabitEthernet 1/0/50 #port group interface Ten-GigabitEthernet 1/0/51 #port group interface Ten-GigabitEthernet 1/0/52 #quit #irf-port-configuration active #激活irf配置 #interface range Ten-GigabitEthernet 1/0/49 to Ten-GigabitEthernet 1/0/52 #批量管理端口 #undo shutdown #启动端口 #save #保存standby交换机的命令#sys #irf member 1 renumber 2 #当前irf成员id重命名为2 #quit #reboot #sys #interface range Ten-GigabitEthernet 2/0/49 to Ten-GigabitEthernet 2/0/52 #批量管理端口 #shutdown #关闭端口 #quit #irf member 2 priority 1 #配置当前irf成员id2的优先级为1 #irf-port 2/2 #进入irf端口2/2 #port group interface Ten-GigabitEthernet 2/0/49 #加入当前irf #port group interface Ten-GigabitEthernet 2/0/50 #port group interface Ten-GigabitEthernet 2/0/51 #port group interface Ten-GigabitEthernet 2/0/52 #quit #irf-port-configuration active #激活irf #interface range Ten-GigabitEthernet 2/0/49 to Ten-GigabitEthernet 2/0/52 #批量管理端口 #undo shutdown #启动端口 #quit #save验证:[sw1]dis irf MemberID Role Priority CPU-Mac Description *+1 Master 32 30e7-b21f-0104 --- 2 Standby 1 30e7-bae6-0204 ---{dotted startColor="#ff6c6c" endColor="#1989fa"/}链路聚合原文链接:https://blog.csdn.net/VictoryKingLIU/article/details/79560157静态聚合模式<H3C>system-view [H3C]int Bridge-Aggregation 1 [H3C-Bridge-Aggregation1]quit [H3C]int GigabitEthernet 1/0/1 [H3C-GigabitEthernet1/0/1]port link-aggregation group 1 [H3C-GigabitEthernet1/0/1]int GigabitEthernet 1/0/2 [H3C-GigabitEthernet1/0/2]port link-aggregation group 1 [H3C-GigabitEthernet1/0/2]int GigabitEthernet 1/0/3 [H3C-GigabitEthernet1/0/3]port link-aggregation group 1 [H3C]dis link-aggregation verbose动态聚合模式<H3C>system-view [H3C]int Bridge-Aggregation 1 [H3C-Bridge-Aggregation1]link-aggregation mode dynamic [H3C-Bridge-Aggregation1]quit [H3C]int GigabitEthernet 1/0/1 [H3C-GigabitEthernet1/0/1]port link-aggregation group 1 [H3C-GigabitEthernet1/0/1]int GigabitEthernet 1/0/2 [H3C-GigabitEthernet1/0/2]port link-aggregation group 1 [H3C-GigabitEthernet1/0/2]int GigabitEthernet 1/0/3 [H3C-GigabitEthernet1/0/3]port link-aggregation group 1 [H3C]dis link-aggregation verbose{dotted startColor="#ff6c6c" endColor="#1989fa"/}pvid 不同VLAN间通讯SW1: interface GigabitEthernet1/0/1 port link-mode bridge port access vlan 100 combo enable fiber # interface GigabitEthernet1/0/2 port link-mode bridge port link-type trunk port trunk permit vlan 1 100 port trunk pvid vlan 100 combo enable fiber # SW2: interface GigabitEthernet1/0/1 port link-mode bridge port access vlan 200 combo enable fiber # interface GigabitEthernet1/0/2 port link-mode bridge port link-type trunk port trunk permit vlan 1 200 port trunk pvid vlan 200 combo enable fiber # {dotted startColor="#ff6c6c" endColor="#1989fa"/}ACL控制规则[H3C]acl basic 2000 #创建基础规则 [H3C-acl-ipv4-basic-2000]rule deny source 192.168.1.2 0 #编写规则内容,阻止来自192.168.1.2的包 [H3C-acl-ipv4-basic-2000]int g1/0/1 #进入接口 [H3C-GigabitEthernet1/0/1]packet-filter 2000 inbound #应用规则 inbound入站 outbound出站在本案例中,若要禁止192.168.1.1访问2,需要在G1/0/1应用 outbound出站规则,这样数据包在抵达2并返回到接口时会被阻止;要禁止全体访问2,则需要在G1/0/2应用inbound入站规则,这样数据包从2出发并经过接口时会被阻止。端口控制若要阻止vlan1所有telnet访问,则可以在vlan1中设置出站规则[H3C]acl advanced 3001 [H3C-acl-ipv4-adv-3001]rule 1 deny tcp source-port eq 23 [H3C-acl-ipv4-adv-3001]int vlan1 [H3C-Vlan-interface1]packet-filter 3001 outbound若仅要阻止1.5或网段的telnet访问,则可以设置入站规则[H3C-acl-ipv4-adv-3002]rule 1 deny tcp source 192.168.1.5 0 destination-port eq 23 [H3C-Vlan-interface1]packet-filter 3002 inbound{dotted startColor="#ff6c6c" endColor="#1989fa"/}端口隔离参考连接:https://blog.csdn.net/weixin_34110749/article/details/92738677(特别注明:模拟器中端口隔离功能不起作用)[H3C]port-isolate group 2 [H3C]int g1/0/1 [H3C-GigabitEthernet1/0/1]port-isolate enable group 2 [H3C-GigabitEthernet1/0/1]int g1/0/2 [H3C-GigabitEthernet1/0/2]port-isolate enable group 2 [H3C-GigabitEthernet1/0/2]quit [H3C]dis port-isolate group 2 Port isolation group information: Group ID: 2 Group members: GigabitEthernet1/0/1 GigabitEthernet1/0/2{dotted startColor="#ff6c6c" endColor="#1989fa"/}IRF堆叠LACP-MAD检测参考链接:https://blog.csdn.net/qq_45662411/article/details/105983636开启前,堆叠线断开后两设备都成为master在线,影响网络运行;开启后,LACP-MAD协议会控制在线的成员关闭端口,只保留一个master,防止网络冲突。IRF设备配置: [master]int Bridge-Aggregation 2 #创建一个名为2的聚合端口组 [master-Bridge-Aggregation2]link-aggregation mode dynamic #将此端口组的模式改为动态 [master-Bridge-Aggregation2]mad enable #开启mad检测 [master-Bridge-Aggregation2]quit #退出接口视图 [master]int range g1/0/1 g2/0/1 #同时进入这两个接口 [master-if-range]port link-aggregation group 2 #将他们加入到这个接口组2中 下层配置: [H3C]int Bridge-Aggregation 2 #创建一个名为2的聚合端口组 [H3C-Bridge-Aggregation2]link-aggregation mode dynamic #将此端口组的模式改为动态 [H3C-Bridge-Aggregation2]quit #退出接口视图 [H3C]int range g1/0/1 g1/0/2 #进入到这两个接口 [H3C-if-range]port link-aggregation group 2 #将这两个端口组加入到接口组2中{dotted startColor="#ff6c6c" endColor="#1989fa"/}AP三层上线所属VLAN配置DHCP Option43option43格式简要说明: 80 07 00 00 01 02 02 02 02 80:固定值,不用改变; 07:长度字段,其后面所跟数据的字节长度; 00 00:固定值,不用改变; 01:表示后面的IP地址的个数,此处为一个IP地址; 02 02 02 02:IP地址转换工具https://tool.520101.com/wangluo/jinzhizhuanhuan/dhcp server ip-pool vlan5 gateway-list 192.168.1.1 network 192.168.1.0 mask 255.255.255.0 dns-list 114.114.114.114 option 43 hex 800700000103030302本地转发性能更高更灵活,通过AC管理。AP接口如果是access,则ap和客户端在同一个VLAN。AP接口如果是trunk,则可以分别配置VLAN。{dotted startColor="#ff6c6c" endColor="#1989fa"/}UEFI PXE网络启动dhcp server ip-pool test gateway-list 192.168.1.254 network 192.168.1.0 mask 255.255.255.0 bootfile-name \\Boot\\x64\\wdsmgfw.efi #传统引导为\\Boot\\x64\\wdsnbp.com dns-list 114.114.114.114 next-server 192.168.100.100 #WDS服务器学习实验 acl策略PVID路由口端口汇聚堆叠、汇聚、ospf静态路五机堆叠三机堆叠
2022年08月09日
602 阅读
0 评论
4 点赞
2022-08-02
Alma linux 8 安装 Oracle19C RPM
官方英文文档https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/index.html登陆官网注册并下载数据库https://www.oracle.com/cn/database/technologies/oracle-database-software-downloads.html#19c我这里下载19.3 - Enterprise Edition (also includes Standard Edition 2) Linux x86-64 RPM (2.5 GB)安装这个RPM需要一个前置包oracle-database-preinstall直接使用自动补全安装环境yum localinstall https://yum.oracle.com/repo/OracleLinux/OL8/appstream/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el8.x86_64.rpm安装rpm -ihv oracle-database-ee-19c-1.0-1.x86_64.rpm warning: oracle-database-ee-19c-1.0-1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:oracle-database-ee-19c-1.0-1 ################################# [100%] [INFO] Executing post installation scripts... [INFO] Oracle home installed successfully and ready to be configured. To configure a sample Oracle Database you can execute the following service configuration script as root: /etc/init.d/oracledb_ORCLCDB-19c configure安装完成后按提示初始化 /etc/init.d/oracledb_ORCLCDB-19c configure Configuring Oracle Database ORCLCDB. Prepare for db operation 8% complete Copying database files 31% complete Creating and starting Oracle instance 32% complete 36% complete 40% complete 43% complete 46% complete Completing Database Creation 51% complete 54% complete Creating Pluggable Databases 58% complete 77% complete Executing Post Configuration Actions 100% complete Database creation complete. For details check the logfiles at: /opt/oracle/cfgtoollogs/dbca/ORCLCDB. Database Information: Global Database Name:ORCLCDB System Identifier(SID):ORCLCDB Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log" for further details. Database configuration completed successfully. The passwords were auto generated, you must change them by connecting to the database using 'sqlplus / as sysdba' as the oracle user.开放防火墙端口firewall-cmd --add-port=1521/tcp --permanent success firewall-cmd --reload success firewall-cmd --list-ports 1521/tcp切换到oracle用户su - oracle编辑环境变量vi .bash_profile export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin export ORACLE_SID=ORCLCDB刷新当前用户环境变量source ~/.bash_profile登录数据库$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Tue Aug 2 13:54:47 2022 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB1 READ WRITE NO 修改密码SQL> alter user system identified by 123456;远程登陆测试我使用的是Navicat 15 for Oracle
2022年08月02日
80 阅读
0 评论
0 点赞
2022-07-27
VMware vSphere ESXi笔记记录
最新版本下载:https://customerconnect.vmware.com/cn/downloads/#all_products1、loading esxi installer 卡死在 loading /lsi_mr3.v00使用UEFI模式安装2、vSphere Clustering Service (vCLS)虚拟机异常处理缺少功能进BIOS把MWAIT开启3、vCenter Converter standalone 转换物理机到虚拟机问题提交任务后,总是停留在1%,进度信息停在:Connecting to the Converter helper server on the destination virtual machine.但是错误提示,一直等待。取消任务后,提示:Unable to connect to the Converter helper server on the destination virtual machine问题解决:因为Converter Server在 vCenter上创建的 helper vm虚拟机的缺省网络设置是自动获取ip地址,而网络上没有可用的dhcp服务,所以Converter Server和helper vm通讯失败。应该在vCenter Converter提交任务前的配置页,静态配置helper vm的ip地址,最好用ipv4,并且和vCenter Converter同网段,速度会更快。————————————————版权声明:本文为CSDN博主「我是超级用户」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/petrosofts/article/details/750034594、VMware EXSI 启用vMotion选择编辑 VMkernel适配器启用 vMotion功能5、
2022年07月27日
124 阅读
0 评论
0 点赞
1
2
3
...
12