运维07:堡垒机

什么是跳板机

跳板机就是一台服务器而已,运维人员在使用管理服务器的时候,必须先连接上跳板机,然后才能去操控内网中的服务器,才能登录到目标设备上进行维护和操作

开发小张 ---> 登录跳板机 ---> 再登录开发服务器

测试小王 ---> 登录跳板机 ---> 再登录测试服务器

跳板机的优缺点

优点:集中式对服务器进行管理

缺点:没有实现对于运维人员操作的监控和审计。使用跳板机的过程中,还有可能在服务器上进行错误的操作。一旦出现错误操作,很难定位到操作人。

堡垒机运维思想

  • 审计也只是事后的行为,审计能够发现问题和责任人,但是无法防止问题的发生
  • 只有实现事先严格监控,才能够在源头上解决服务器操作的事故
  • 堡垒机能够创建系统账号,该系统账号功能是属于角色区分的作用,但是也无法确认该账号的执行人,比如 测试员工可以登录运维员工的账号

堡垒机的作用

堡垒机在跳板机的基础上做了优化

  • 核心系统运维和安全审计管理
  • 过滤和拦截非法请求访问、恶意攻击,拒绝不合法的命令,进行审计口监控、报警和责任追踪
  • 报警、记录、分析、处理

堡垒机核心功能

  • 单点登录功能
  • 账号管理
  • 身份认证
  • 资源授权
  • 访问控制
  • 操作审计

JumpServer核心架构讲解

官方文档:JumpServer 文档 

组件介绍

核心架构

JumpServer服务器部署 

#Linux服务器准备,硬件配置:2cpu 4G内存 50G硬盘

环境初始化

#环境准备,关闭防火墙服务
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl disable --now firewalld
reboot#配置yum源,准备好阿里云的yum源,以及epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all  #清空原有的yum缓存
yum makecache  #生成新的yum缓存,便于加速软件下载#安装系统初始化所需的软件
yum install -y bash-completion vim lrzsz wget expect nettools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel gcc#安装jumpserver运行所需的依赖环境
yum -y install git python-pip gcc automake autoconf pythondevel vim sshpass lrzsz readline-devel zlib zlib-devel openssl openssl-devel#修改系统的字符集,改为是中文的
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8#把修改字符集的命令,写入全局配置文件
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf#检查系统编码
locale

部署数据库mysql 5.6

#获取mysql 5.6的软件包
mkdir /teach_jmp
cd /teach_jmp/
wget https://cdn.mysql.com//Downloads/MySQL-5.6/MySQL-5.6.49-1.el7.x86_64.rpm-bundle.tar#解压缩
mkdir mysql_rpm
tar -xf MySQL-5.6.49-1.el7.x86_64.rpm-bundle.tar -C ./mysql_rpm/#使用yum命令,安装一系列的rpm包
cd mysql_rpm
yum localinstall ./*#安装完毕后,检查mysql的配置文件,做如下的修改
vim /etc/my.cnf
[mysqld_safe]
log-error=/var/log/mysql/mysql.log
pid-file=/var/run/mysql/mysql.pid#启动mysql服务端
systemctl start mysql#修改密码
[root@jumpserver mysql_rpm]# cat ~/.mysql_secret    #查看随机密码
# The random password set for the root user at Tue Dec 12 15:23:04 2023 (local time): l9KyFuhIg7um_BDm
[root@jumpserver mysql_rpm]# mysqladmin -uroot -pl9KyFuhIg7um_BDm password 你要设置的密码#使用新密码登录mysql 5.6
mysql -uroot -p#更为安全的修改密码的方法:使用随机密码登录mysql,然后再使用以下sql语句,然后再刷新,再用新密码登录mysql 5.6
update mysql.user set password=password('你的密码') where user='root';
flush privileges;#创建数据库
create database jumpserver default charset 'utf8' collate 'utf8_bin';#创建用户且设置密码
create user 'jumpserver'@'%' IDENTIFIED BY '密码';#给该用户授予访问数据库的权限
grant all privileges on jumpserver.* to 'jumpserver'@'%' identified by 'chaoge888';
flush privileges;

部署Python3.6

#下载python3.6源代码
cd /teach_jmp && \
wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz#解压缩
tar -zxf Python-3.6.10.tgz#指定安装路径
cd Python-3.6.10
./configure --prefix=/teach_jmp/python3.6.10/#编译且编译安装
make && make install#配置环境变量
vim /etc/profile 
在文件最后添加 PATH="/teach_jmp/python3.6.10/bin:$PATH"#让刚才配置的环境变量生效
source /etc/profile#使用环境变量的方式,启动python3
python3

创建Python3虚拟环境详解

#python3的程序在运行的时候,必须使用pip3安装模块,类似以前的yum#更换pip3的下载源,换成阿里云的下载源
mkdir ~/.pip
touch ~/.pip/pip.conf
[root@jumpserver ~]# vim ~/.pip/pip.conf
[root@jumpserver ~]# cat ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/#下载虚拟环境工具
pip3 install virtualenv#使用虚拟环境工具,再创建出一个python3解释器,用于运行代码
cd /teach_jmp
virtualenv --python=python3 jmp_venv1#此时,你的linux服务器上就有了2个python3解释器了
#解释器本体是:/teach_jmp/python3.6.10/bin/python3
#我们创建的虚拟解释器的路径是:/teach_jmp/jmp_venv1/bin/python3#那个python3的解释器的环境变量排在前面,默认用的就是哪个python3解释器
[root@jumpserver teach_jmp]# echo $PATH
/teach_jmp/python3.6.10/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@jumpserver teach_jmp]# which python3
/teach_jmp/python3.6.10/bin/python3#激活虚拟环境,其实是修改了环境变量,
source /teach_jmp/jmp_venv1/bin/activate
(jmp_venv1) [root@jumpserver teach_jmp]# echo $PATH
/teach_jmp/jmp_venv1/bin:/teach_jmp/python3.6.10/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
(jmp_venv1) [root@jumpserver teach_jmp]# which python3
/teach_jmp/jmp_venv1/bin/python3#可以退出虚拟环境
deactivate
[root@jumpserver teach_jmp]# which python3
/teach_jmp/python3.6.10/bin/python3

 Redis数据库部署

mysql关系型数据库,磁盘型数据库,数据是以文件形式存储在磁盘上的,可以持久化长期存储。

redis内存型数据库,缓存型数据库。

#安装redis的形式
#rpm包手动安装,需要手动解决依赖,不推荐使用
#yum自动化安装,适合软件调试学习使用,安装自动解决依赖,很好用
#源代码编译安装redis#选择yum自动化安装即可
yum install redis -y#启动redis
systemctl start redis
redis-cli

部署jumpserver服务

一个后台程序,基本上都是需要依赖于数据库才能运行,后台程序在启动的时候,代码就会去连接数据库,保证数据库正确启动,而且可以正确连接,否则后台程序是起不来的。

#获取jumpserver程序的代码,github有公有仓库,所有人都可以下载,私有仓库,只有企业内部人员,用账号密码登录后下载
wget https://github.com/jumpserver/jumpserver/releases/download/v2.1.0/jumpserver-v2.1.0.tar.gz#解压缩
tar -zxvf jumpserver-v2.1.0.tar.gz#软链接
ln -s /teach_jmp/jumpserver-v2.1.0 /teach_jmp/jumpserver#安装依赖关系
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel#激活虚拟环境
source /teach_jmp/jmp_venv1/bin/activate#安装jumpserver所需的模块
pip3 install -r /teach_jmp/jumpserver/requirements/requirements.txt

修改JumpServer配置文件

#先备份一下配置文件
cp config_example.yml config.yml#生成密钥
if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi
JtSaSJPkG8wea50Y1xQAULvI09dVHPeIjLGfRWnXMRhD3lPgCP#生成token密钥
if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi
0OjU5LGYrJmMKKmt#把刚才生成的随机密钥,写入配置文件
vim config.yml

对python程序进行数据库迁移

jumpserver这个程序是由python的web框架djiango开发而来,必须得先进行数据库迁移,生成库表的信息,才能运行程序

#数据迁移
python3 /teach_jmp/jumpserver/apps/manage.py makemigrations
python3 /teach_jmp/jumpserver/apps/manage.py migrate#启动jms服务
/teach_jmp/jumpserver/jms start -d

Koko程序部署

koko是golang语言开发的一款组件,和之前的coco组件(python开发的)相比,koko的性能、效率、系统资源利用率都更高了。

#下载koko源代码
wget https://github.com/jumpserver/koko/releases/download/v2.1.0/koko-v2.1.0-linux-amd64.tar.gz#解压缩配置koko文件
tar -zxf koko-v2.1.0-linux-amd64.tar.gz
chown -R root:root koko-v2.1.0-linux-amd64
ln -s /teach_jmp/koko-v2.1.0-linux-amd64 /teach_jmp/koko#修改koko配置文件信息
cd koko
cp config_example.yml config.yml
vim config.yml

#启动koko 
/teach_jmp/koko/koko -d#可以检查koko的日志,明确koko是否正确启动
tail /teach_jmp/koko/data/logs/koko.log#检查koko的端口
netstat -tunlp

部署Guacamole组件

#在https://guacamole.apache.org/releases下载压缩包,然后用rz命令,把压缩包从windows传到Linux的/teach_jmp#解压缩、配置
tar -zxvf guacamole-server-1.2.0.tar.gz
mv guacamole-server-1.2.0 guacamole
cd guacamole#准备编译环境
yum install cairo-devel libjpeg-turbo-devel libjpeg-devel libpng-devel libtool uuid-devel -y#可选的软件依赖
yum install freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel -y#安装FFmPeg工具
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install ffmpeg
yum install vlc#编译安装guacamole
./configure --with-init-dir=/etc/init.d
make && make install#部署java开发环境
yum install -y java-1.8.0-openjdk#创建运行guacamole所需的文件夹
mkdir -p /config/guacamole /config/guacamole/extensions  /config/guacamole/record /config/guacamole/drive && \
chown daemon:daemon /config/guacamole/record /config/guacamole/drive && \
cd /config#下载tomcat工具,用于运行java项目
#在https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz目录下载压缩包到windows,然后再用rz命令把它传到Linux系统的/opt目录下#部署guacamole和tomcat的结合,需要修改它们的配置文件
cd /opt
tar -xf apache-tomcat-9.0.85.tar.gz
mv apache-tomcat-9.0.85 tomcat9
rm -rf /opt/tomcat9/webapps/*
sed -i 's/Connector port="8080"/Connector port="8081"/g' /opt/tomcat9/conf/server.xml
echo "java.util.logging.ConsoleHandler.encoding = UTF-8" >> /opt/tomcat9/conf/logging.properties#设置guacamole的运行环境变量
export JUMPSERVER_SERVER=http://127.0.0.1:8080
echo "export JUMPSERVER_SERVER=http://127.0.0.1:8080" >> ~/.bashrc
export BOOTSTRAP_TOKEN=0OjU5LGYrJmMKKmt
echo "export BOOTSTRAP_TOKEN=0OjU5LGYrJmMKKmt" >> ~/.bashrc
export JUMPSERVER_KEY_DIR=/config/guacamole/keys
echo "export JUMPSERVER_KEY_DIR=/config/guacamole/keys" >> ~/.bashrc
export GUACAMOLE_HOME=/config/guacamole
echo "export GUACAMOLE_HOME=/config/guacamole" >> ~/.bashrc
export GUACAMOLE_LOG_LEVEL=ERROR
echo "export GUACAMOLE_LOG_LEVEL=ERROR" >> ~/.bashrc
export JUMPSERVER_ENABLE_DRIVE=true
echo "export JUMPSERVER_ENABLE_DRIVE=true" >> ~/.bashrc#启动服务
/etc/init.d/guacd start
sh /opt/tomcat9/bin/startup.sh

Lina组件部署

#提前准备好nginx服务
yum install nginx -y#获取代码
wget https://github.com/jumpserver/lina/releases/download/v2.1.0/lina-v2.1.0.tar.gz#解压缩lina
tar -zxvf lina-v2.1.0.tar.gz
mv lina-v2.1.0 lina
chown -R nginx:nginx lina

Luna组件部署

#下载源码
wget https://github.com/jumpserver/luna/releases/download/v2.1.1/luna-v2.1.1.tar.gz#解压配置
tar -zxvf luna-v2.1.1.tar.gz
mv luna-v2.1.1 luna
chown -R root.root luna

部署nginx

nginx作用于处理静态文件,以及用于对jumpserver后台程序的反向代理

#安装nginx
yum install nginx -y#修改nginx配置文件,删除原来的虚拟主机配置
sed -i '38,58d' /etc/nginx/nginx.conf#添加新的虚拟主机配置
server {listen 80;client_max_body_size 100m;  #录像及文件上传大小限制location /ui/ {try_files $uri / /index.html;alias /teach_jmp/lina/;}location /luna/ {try_files $uri / /index.html;alias /teach_jmp/luna/; # luna路径,如果修改安装目录,此处需要修改}location /media/ {add_header Content-Encoding gzip;root /teach_jmp/jumpserver/data/;   #录像位置,如果修改安装目录,此处需要修改}location /static/ {root /teach_jmp/jumpserver/data/; # 静态资源,如果修改安装目录,此处需要修改}location /koko/ {proxy_pass http://localhost:5000;proxy_buffering off;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;access_log off;}location /guacamole/ {proxy_pass http://localhost:8081/;proxy_buffering off;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $http_connection;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;access_log off;}location /ws/ {proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;proxy_pass http://localhost:8070;proxy_http_version 1.1;proxy_buffering off;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}location /api/ {proxy_pass http://localhost:8080;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;}location /core/ {proxy_pass http://localhost:8080;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;}location / {rewrite ^/(.*)$ /ui/$1 last;}
}#启动nginx
nginx

然后在浏览器输入你机器的ip地址,会出现以下界面

用户名和密码默认都是admin 

jumpserver启动流程总结

#启动数据库mysql redis
systemctl start mysql
systemctl start redis#激活python的虚拟环境,然后启动jms核心后台
source /teach_jmp/jmp_venv1/bin/activate
/teach_jmp/jumpserver/jms start -d#启动koko程序
/teach_jmp/koko/koko -d#guacamole程序启动
/etc/init.d/guacd start#启动tomcat程序
bash /opt/tomcat9/bin/startup.sh#web服务器启动
nginx

给目标机器添加防火墙规则

设置防火墙规则,只允许堡垒机登录Linux

#只允许jumpserver机器的ip可以登录,其他机器拒绝
iptables -A INPUT -s 192.168.13.130 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT

JumpServer配置邮箱

 其中,SMTP密码如下:

JumpServer创建用户

 

JumpServer资产创建管理

资产:服务器、交换机、路由器等设备

资产中的用户管理

添加资产 

管理用户

Root 超级管理员

sudo 命令,伪管理员,默认以root身份去执行命令,因此要慎用,我们可以基于sudo命令做更多的权限控制

wangcai 系统的普通用户,权限很低

admin jumpserver 管理员用户

qiujie jumpserver 普通用户,权限较低

管理用户【客户端 --> jumpserver -->目标服务器】

普通用户指的就是被管理机器上的root用户,或者是可以使用sudo权限的用户,jumpserver利用该管理用户在目标机器上,进行远程的命令执行,推送系统用户,获取资产的硬件信息、指标等。

系统用户 

 

/etc/passwd 是系统级的超级用户、普通用户等等,有些是可以允许登录服务器的,使用ssh协议.。

jumpserver 的系统用户,针对jumpserver操控,登录普通机器,所使用的一些特有用户

资产授权

 

 

web终端功能

Luna提供web终端界面

 

命令行跳板机

koko的功能来了

#在xshell中输入命令,登录jumpserver
ssh admin@192.168.xxx.130 -p 2222

然后就会进入以下界面 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/696809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贷齐乐系统最新版SQL注入(无需登录绕过WAF可union select跨表查询)

一、环境 已上传资源(daiqile) 二、代码解释 1.1Request 不管get请求还是post请求都可以接收到 1.2过滤的还挺多 1.3第二个WAF把数据分为两个了一个Key一个value,全是explode的功劳 1.4submit是if进入的前提 很明显走进来了 1.5那我们在这…

学习JAVA的第三天(基础)

目录 流程控制语句 顺序结构 分支结构 循环结构 分类: 练习 跳转控制语句 练习 数组 数组介绍 数组的定义和静态初始化 数组定义 数组的静态初始化 数组元素访问 数组遍历 数组动态初始化 JAVA内存分配 流程控制语句 顺序结构 是Java程序默认的执行流程…

UIKit 在 UICollectionView 中拖放交换 Cell 视图的极简实现

概览 UIKit 中的 UICollectionView 视图是我们显示多列集合数据的不二选择,而丰富多彩的交互操作更是我们选择 UICollectionView 视图的另一个重要原因。 如上图所示:我们实现了在 UICollectionView 中拖放交换任意两个 Cell 子视图的功能,这…

Zabbix 远程监控主机

目录 1、安装 Zabbix 安装客户端 服务端测试通讯 Web页面添加主机 2、监控 Nginx 自定义脚本监控 Nginx web配置台 3、监控 MySQL 配置模版文件 配置Web界面 1、安装 Zabbix node-12 作为zabbix的被监控端,提供mysql服务器,配置zabbix监控node…

jquery写组件滑动人机验证组件

jquery组件,虽然 jquery 语法古老,但是写好了用起来真的很爽啊,本文用滑动人机验证给大家做个详细教程(直接复制代码就可以用噢o(* ̄▽ ̄*)ブ) 第一步 先看下组件本身 component.js (function() {…

Nginx网络服务三-----(三方模块和内置变量)

1.验证模块 需要输入用户名和密码 我们要用htpasswd这个命令,先安装一下httpd 生成文件和用户 修改文件 访问页面 为什么找不到页面? 对应的路径下,没有这个文件 去创建文件 去虚拟机浏览器查看 有的页面不想被别人看到,可以做…

【UI自动化】使用poco框架进行元素唯一定位

直接选择: 1.poco(text买入).click() 2.poco("android.widget.ImageView").click()相对选择、空间选择: 3.poco(text/name).parent().child()[0].click()正则表达式: 4.listpoco(textMatches".*ETF")今天主要想记录下…

centos 系统盘 放到 win pc 中的异常解决

有一块 2.5 480g sata ssd,之前是笔记本电脑的centos系统盘,后来没用了,打算挂到台式机上当下载盘。台式机pc的主板是华硕 h610m-a。 难点一: 因为台式pc上已经挂了两块3.5 hdd,发现sata的电源线都在3.5hdd附近&#…

利用RBI(Remote Browser Isolation)技术访问ChatGPT

系统组网图 #mermaid-svg-Bza2puvd8MudMbqR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Bza2puvd8MudMbqR .error-icon{fill:#552222;}#mermaid-svg-Bza2puvd8MudMbqR .error-text{fill:#552222;stroke:#552222;…

300分钟吃透分布式缓存-10讲:MC是怎么定位key的?

我们在进行 Mc 架构剖析时,除了学习 Mc 的系统架构、网络模型、状态机外,还对 Mc 的 slab 分配、Hashtable、LRU 有了简单的了解。本节课,将进一步深入学习这些知识点。 接下来,进入 Memcached 进阶的学习。会讲解 Mc 是如何进行…

QT应用软件【协议篇】周立功CAN接口卡代码示例

文章目录 USBCAN系列CAN接口卡规格参数资料下载QT引用周立功的库安装sdk代码USBCAN系列CAN接口卡 USBCAN系列CAN接口卡兼容USB2.0全速规范,可支持1/2/4/8路CAN接口。采用该接口卡,PC机可通过USB连入CAN网络,进行CAN总线数据采集和处理,主要具备以下几大优势特点: 支持车载…

正交匹配追踪(Orthogonal Matching Pursuit, OMP)的MATLAB实现

压缩感知(Compressed Sensing, CS)是一种利用稀疏信号的先验知识,用远少于奈奎斯特采样定理要求的样本数目恢复整个信号的技术。正交匹配追踪(Orthogonal Matching Pursuit, OMP)是一种常见的贪婪算法(Gree…

在苹果电脑MAC上安装Windows10(双系统安装的详细图文步骤教程)

在苹果电脑MAC上安装Windows10(双系统安装的详细图文步骤教程) 一、准备工作准备项1:U盘作为系统安装盘准备项2:您需要安装的系统镜像 二、启动转换助理步骤1:找到启动转换助理步骤2:启动转换助理步骤3&…

波奇学Linux:进程通信管道

进程通信 管道:基于文件级别的单向通信 创建父子进程,使得进程的struct file*fd_array[]的文件描述符指向同一个struct file文件,这个文件是内存级文件。 父进程关写端,子进程再关闭读端。实现单向通信 子进程写入,父进…

C++ Primer 笔记(总结,摘要,概括)——第3章 字符串、向量和数组

目录 3.1 命名空间的using声明 3.2 标准库类型string 3.2.1 定义和初始化string对象 3.2.2 string对象上的操作 3.2.3 处理string对象中的字符 3.3 标准库类型vector 3.3.1 定义和初始化vector对象 3.3.2 向vector对象中添加元素 3.3.3 其他vector操作 3.4 迭代器介绍 3.4.…

如何使用rocketmq实现分布式事务?

什么是rocketmq事务消息 事务消息是 Apache RocketMQ 提供的一种高级消息类型,支持在分布式场景下保障消息生产和本地事务的最终一致性。 RocketMQ的分布式事务又称为“半消息事务”。 事务消息处理流程 RocketMQ是靠半消息机制实现分布式事务 事务消息&#x…

Spring之AOP源码解析(上)

Aop相关注解 EnableTransactionManagementEnableAspectJAutoProxyEnableAsync... 从注解切入来看看这些注解都干了什么 Import注解作用简述 注入的类一般继承ImportSelector或者ImportBeanDefinitionRegistrar接口 继承ImportSelector接口:selectImports方法返回…

pandas/geopandas 笔记:判断地点在不在路网上 不在路网的点和路网的距离

0 导入库 import osimport pandas as pd pd.set_option(display.max_rows,5)import osmnx as oximport geopandas as gpd from shapely.geometry import Point 1 读取数据 假设我们有 如下的数据: 1.1 新加坡室外基站位置数据 cell_stationpd.read_csv(outdoor…

TSINGSEE青犀AI智能分析网关V4初始配置与算法相关配置介绍

TSINGSEE青犀AI智能分析网关V4内置了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为等实时检测分析,上报识别结果,并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入,可兼容市面上常见…

linux下ffmpeg调用GPU硬件解码(VDPAU/VAAPI)保存文件

本文讲解在linux下面,如何通过ffmpeg调用GPU硬件解码,并保存解码完的yuv文件。 其实,ffmpeg自带的例子hw_decode.c这个文件,就已经能满足要求了,因此,本文就尝试讲解以下hw_decode这个例子。hw_decode.c可以…