運維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.pswp.cn/news/696809.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696809.shtml
英文地址,請注明出處:http://en.pswp.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 子視圖的功能,這…

js如何判斷一個對象中某一個屬性存在并且有值

在JavaScript中,可以使用不同的方法來判斷一個對象中某個屬性是否存在并且有值。以下是幾種常見的方法: 1、使用hasOwnProperty()方法:該方法用于檢查對象是否具有指定的屬性。可以通過以下方式來判斷屬性是否存在并且有值: if (…

整理了去年的一些運維面試題一

Ingress的yaml文件需要包含哪些? CICD搭建流程? JAVA程序打包工具? 如何檢測Linux端口如何通信? k8s集群之間如何通信的? docker組成部分? 20位掩碼有多少主機IP? 在linux中四個T的硬盤使用什…

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…

【CF】團隊訓練賽2 J-Palindrome Reversion 題解

傳送門:Palindrome Reversion 標簽:字符串 題目大意 規定一個操作:選擇字符串中的一段區間[l,r]并使其翻轉。現在給出一個字符串s,你要判斷能否通過一次操作使其變為回文串。 輸入:一個字符串,其長度不超…

在蘋果電腦MAC上安裝Windows10(雙系統安裝的詳細圖文步驟教程)

在蘋果電腦MAC上安裝Windows10(雙系統安裝的詳細圖文步驟教程) 一、準備工作準備項1:U盤作為系統安裝盤準備項2:您需要安裝的系統鏡像 二、啟動轉換助理步驟1:找到啟動轉換助理步驟2:啟動轉換助理步驟3&…

波奇學Linux:進程通信管道

進程通信 管道:基于文件級別的單向通信 創建父子進程,使得進程的struct file*fd_array[]的文件描述符指向同一個struct file文件,這個文件是內存級文件。 父進程關寫端,子進程再關閉讀端。實現單向通信 子進程寫入,父進…

Java面向對象(三)

一、封裝: 一般意義的封裝:把一段重復代碼抽取成一個函數,稱為代碼的封裝(包裝)面向對象語言的封裝:將類的某些信息隱藏在類的內部(通過使用不同的訪問權限修飾符),不許…

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…