当前位置: 首页 > news >正文

CentOS 7下JumpServer安装及配置(超详细版)

前言

Jumpserver是一种用于访问和管理远程设备的Web应用程序,通常用于对服务器进行安全访问。它基于SSH协议,提供了一个安全和可管理的环境来管理SSH访问。Jumpserver是基于Python开发的一款开源工具,其提供了强大的访问控制功能,可以轻松实现用户、主机、命令和审计日志的管理。

Jumpserver的主要功能包括:

  1. 访问控制:Jumpserver提供了灵活的访问控制,可以根据用户、角色、主机、命令和时间等因素实现精细的控制。

  2. 统一认证:Jumpserver支持LDAP、AD、Radius等认证方式,可以实现与企业内部认证系统的集成。

  3. 会话管理:Jumpserver可以记录所有SSH会话并生成审计日志,以便管理人员了解用户的操作情况。

  4. 实时监控:Jumpserver可以实时监控SSH会话,并提供了实时监控面板,可以随时了解用户的操作情况。

  5. 审计日志:Jumpserver提供了完整的审计日志功能,包括用户登录、会话记录、命令执行情况等,方便管理人员进行安全审计和追溯。

  6. 多租户:Jumpserver支持多租户功能,可以实现不同租户的资源隔离和安全管理。

总之,Jumpserver是一款功能强大的安全访问控制系统,可以为企业提供强大的安全管理和审计功能。

目录

1 环境配置

2 修改字符集

3 安装软件包

4 编译安装

5 克隆(git clone)

6 下载Jumpserver

7 配置Jumpserver

 7.1 安装所需的Python modules

 7.2 安装Redis

 7.3 安装MySQL

 7.4 修改Jumpserver配置文件

 7.5 把配置写入config.yml文件

8 启动/关闭Jumpserver

9 部署koko

 9.1 使用docker部署

 9.2 手工下载部署

  9.2.1 部署

  9.2.2 启动koko 

 10 部署guacamole

 10.1 部署

 10.2 列出本地镜像

11 部署luna

12 配置nginx 

 12.1 nginx的安装

 12.2 配置nginx

 12.3 运行nginx

 12.4 修改nginx的主配置文件

13 Jumpserver登录测试


1 环境配置

(1)关闭防火墙。

systemctl stop firewalld

(2)关闭SELinux。

setenforce 0

# setenforce 1    #设置SELinux为强制模式
# setenforce 0    #设置SELinux为宽容模式

普及:

获取SELinux状态:

getenforce

getenforce是一个Linux命令,用于查看SELinux(Security-Enhanced Linux)安全机制的状态(SELinux是一款基于Linux内核的安全模块)。该命令可以显示当前SELinux的强制模式状态:enforcing(强制模式)、permissive(宽容模式)或disabled(禁用模式)。

2 修改字符集

修改字符集,否则可能报“input/output error”问题,因为日志里打印了中文。【逐个输入并运行以下命令】

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

3 安装软件包

yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git

如图,显示“完毕!”即表示我们安装成功!

接下来我们使用wget命令下载个Python的包,下载时间过长,耐心等待。

wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz 

为了确保我们安装成功,我们可以使用ls命令查看下

如图即表示安装成功~接下来我们使用tar命令解压压缩包。

tar xf Python-3.6.1.tar.xz 

 使用ls命令查看,发现有Python-3.6.1即表示我们解压成功!

4 编译安装

首先我们要进入到Python-3.6.1这个目录。

cd Python-3.6.1

 编译安装(时间漫长,耐心等待)

./configure && make && make install

5 克隆(git clone)

进入opt目录下

cd /opt

使用Python3的环境。

python3 -m venv py3
source /opt/py3/bin/activate

运行完毕后会出现:(py3) [root@localhost opt]# 

使用git命令克隆

git clone git://github.com/kennethreitz/autoenv.git

【问题解决】 http://t.csdnimg.cn/OQUcr

问题一:

fatal: unable to connect to github.com:

github.com[0: 20.205.243.166]: errno=???? 

这是因为有些网络环境可能会限制Git 协议默认使用端口的访问,或者直接阻止使用Git协议。因此,我们需要将git://github.com/替换为https://github.com/,这样可以确保与GitHub进行通信。

git clone https://github.com/kennethreitz/autoenv.git

问题二:

fatal: unable to access 'https://github.com/kennethreitz/autoenv.git/': TCP connection reset by peer

我们需要取消http和https代理。 

git config --global --unset http.proxy
git config --global --unset https.proxy

 如图即表示我们成功啦~

克隆完成后,source默认使用bashrc

echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc

 使环境变量生效。

source ~/.bashrc

6 下载Jumpserver

我们还是使用克隆命令(git clone)下载并进入jumpserver目录(cd jumpserver)并将工作目录切换到主分支(git checkout master)。(时间漫长,耐心等待)

git clone https://github.com/jumpserver/jumpserver.git && cd jumpserver && git checkout master

在此过程中遇到同等问题还是取消http、https代理即可。

7 配置Jumpserver

 7.1 安装所需的Python modules

进入 jumpserver 目录时将自动载入 python 虚拟环境.

echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env

安装依赖RPM包

cd requirements/

 输入y

 

yum -y install $(cat rpm_requirements.txt)

 安装Python依赖

pip install --upgrade pip

 阿里云源下载(更快)

pip install -r requirements.txt

【问题解决】

ERROR: Could not open requirements file: [Errno 2] 没有那个文件或目录: 'requirements.txt'

先创建requirements.txt 

pip freeze > requirements.txt

重新执行命令

pip install -r requirement.txt

 7.2 安装Redis

yum -y install redis

设置开机自启

systemctl enable redis

 启动redis

systemctl start redis

 7.3 安装MySQL

在centos里,默认的数据库是mariadb

yum -y install mariadb mariadb-devel mariadb-server

启动mariadb

systemctl start mariadb

设置开机自启

systemctl enable mariadb

进入mariadb

mysql

 创建jumpserver数据库默认使用utf8字符集

create database jumpserver default charset 'utf8';

 给本机授权

grant all on jumpserver.* to 'jumpserveradmin'@'127.0.0.1' identified by 'jumpserverpwd';

刷新数据库

flush privileges;

\q退出

\q

 7.4 修改Jumpserver配置文件

先进入/opt/jumpserver目录下。(因为我们刚才在/opt/jumpserver/requirements下,所以直接cd ..进入上一目录即可。)

cd ..
cp config_example.yml config.yml

生成随机SECRET_KEY
SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`

 注意:A-Za-z0-9 中不能有空格!且符号`不能写错,位置也不能错,否则将会遇到“-bash: /dev/urandom: 权限不够”的情况。

echo $SECRET_KEY

把SECRET_KEY写入bashrc中。

echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc

生成随机BOOTSTRAP_TOKEN
BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
echo $BOOTSTRAP_TOKEN

 

把BOOTSTRAP_TOKEN写入bashrc中。

echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc

 7.5 把配置写入config.yml文件

逐个运行如下指令

sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml
sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml
sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml
echo -e "\033[31m 你的SECRET_KEY是 $SECRET_KEY \033[0m"

echo -e "\033[31m 你的BOOTSTRAP_TOKEN是 $BOOTSTRAP_TOKEN \033[0m"

确认内容有没有错误 vi config.yml

vi config.yml

修改如图所示内容

修改成如图所示:

配置完成啦~

8 启动/关闭Jumpserver

在/opt/jumpserver路径下。

启动

./jms start 

【看到一堆ok即表示启动成功,如果没成功显示error则表示配置有问题,则重新vi config.yml配置】

 后台启动(后台运行使用 -d 参数)

./jms start -d

关闭

./jms stop

【问题解决】http://t.csdnimg.cn/8XoNi

Traceback (most recent call last):
  File "./jms", line 11, in <module>
    import django
ModuleNotFoundError: No module named 'django'

 

使用pip install 模块名下载。

pip install Django

下载完成后重新启动就好。

如果下载不成功,出现一堆红色下载不成功。

更新 pip 到最新版本 

pip install --upgrade pip

再执行一次就好了。

pip install Django

 最后一行显示successfully installed等表示成功安装django。

成功啦~

9 部署koko

koko支持终端管理,默认端口(port)为2222。

【提供两种方法,自行选择部署】

 9.1 使用docker部署

下载docker

yum -y install docker

 

启动docker

systemctl start docker

查看自己的IP地址。(IP地址在“2:ens33:”中inet后面)

ip a

Server_IP=自己的IP地址。

Server_IP=192.168.10.111

查看BOOTSTRAP_TOKEN值

echo $BOOTSTRAP_TOKEN

 根据查看的值输入下面指令。(值不一样,不要照搬下面指令)

BOOTSTRAP_TOKEN=BZYt8bkFhzZjAjc2
docker run --name jms_koko -d -p 2222:2222 -p 5000:5000 -e CORE_HOST=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_koko:1.5.5

显示comolete就说明部署完成啦~

 9.2 手工下载部署

【本人采用docker部署,所以手工部署就不附图啦~】

  9.2.1 部署

进入/opt目录。

cd /opt

使用wget命令下载压缩包。【官方网站:https://github.com/jumpserver/koko/releases】

wget https://github.com/jumpserver/koko/releases/download/1.5.2/koko-master-37daa82-linux-amd64.tar.gz

 解压

tar -xf koko-master-37daa82-linux-amd64.tar.gz

 进入/opt/kokodir

cd /opt/kokodir

授权

chown -R root:root /opt/kokodir

先使用cp命令备份一下(cp 源文件路径  目标文件夹)

cp config_example.yml config.yml

 编辑config.yul   https://docs.jumpserver.org/zh/v3/installation/source_install/koko_install/#13

vi config.yml

BOOTSTRAP_TOKEN需要 jumpserver/config.yml 里面获取,保证一致】 

# 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复
# NAME: {{ Hostname }}# Jumpserver项目的url, api请求注册会使用
CORE_HOST: http://127.0.0.1:8080   # Core 的地址# Bootstrap Token, 预共享秘钥, 用来注册coco使用的service account和terminal
# 请和jumpserver 配置文件中保持一致,注册完成后可以删除
BOOTSTRAP_TOKEN: ********  # 和 Core config.yml 的值保持一致# 启动时绑定的ip, 默认 0.0.0.0
BIND_HOST: 0.0.0.0# 监听的SSH端口号, 默认2222
SSHD_PORT: 2222            # 使用 0.0.0.0:2222# 监听的HTTP/WS端口号,默认5000
HTTPD_PORT: 5000           # 使用 0.0.0.0:5000# 项目使用的ACCESS KEY, 默认会注册,并保存到 ACCESS_KEY_STORE中,
# 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret
# ACCESS_KEY: null# ACCESS KEY 保存的地址, 默认注册后会保存到该文件中
# ACCESS_KEY_FILE: data/keys/.access_key# 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL]
LOG_LEVEL: DEBUG           # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR# SSH连接超时时间 (default 15 seconds)
# SSH_TIMEOUT: 15# 语言 [en,zh]
# LANGUAGE_CODE: zh# SFTP的根目录, 可选 /tmp, Home其他自定义目录
# SFTP_ROOT: /tmp# SFTP是否显示隐藏文件
# SFTP_SHOW_HIDDEN_FILE: false# 是否复用和用户后端资产已建立的连接(用户不会复用其他用户的连接)
# REUSE_CONNECTION: true# 资产加载策略, 可根据资产规模自行调整. 默认异步加载资产, 异步搜索分页; 如果为all, 则资产全部加载, 本地搜索分页.
# ASSET_LOAD_POLICY:# zip压缩的最大额度 (单位: M)
# ZIP_MAX_SIZE: 1024M# zip压缩存放的临时目录 /tmp
# ZIP_TMP_PATH: /tmp# 向 SSH Client 连接发送心跳的时间间隔 (单位: 秒),默认为30, 0则表示不发送
# CLIENT_ALIVE_INTERVAL: 30# 向资产发送心跳包的重试次数,默认为3
# RETRY_ALIVE_COUNT_MAX: 3# 会话共享使用的类型 [local, redis], 默认local
# SHARE_ROOM_TYPE: local# Redis配置
# REDIS_HOST: 127.0.0.1      # 如果需要部署多个 koko, 需要通过 redis 来保持会话
# REDIS_PORT: 6379
# REDIS_PASSWORD:
# REDIS_CLUSTERS:
# REDIS_DB_ROOM:

  9.2.2 启动koko 

./koko

 10 部署guacamole

【基于HTML5和 JavaScript 的VNC查看器】

 10.1 部署

docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole:1.5.5

显示如图所示内容即表示部署成功!

【问题解决】

/usr/bin/docker-current: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See '/usr/bin/docker-current run --help'.

启动下docker就好啦~

systemctl start docker

或者重新启动下docker服务。

systemctl restart docker.service

 10.2 列出本地镜像

docker images

11 部署luna

与nginx结合支持Web Terminal前端。

进入opt目录。

cd /opt/

wget命令下载luna压缩包。

wget https://github.com/jumpserver/luna/releases/download/1.5.5/luna.tar.gz

 【问题解决】http://t.csdnimg.cn/h1KAe

[root@localhost opt]# wget https://github.com/jumpserver/luna/releases/download/1.5.5/luna.tar.gz
--2023-10-10 10:41:10--  https://github.com/jumpserver/luna/releases/download/1.5.5/luna.tar.gz
正在解析主机 github.com (github.com)... 20.205.243.166
正在连接 github.com (github.com)|20.205.243.166|:443... 已连接。
无法建立 SSL 连接。

原因:

wget在使用HTTPS协议时,默认会去验证其网站的证书,而这个证书验证经常会失败。

问题解决:

方法一:在后面加“--no-check-certificate”。(执行时候不验证SSL)

--no-check-certificate

【在最后加,在wget后面加还会报同样的错误】 

搞定啦~ 

方法二:将https换成http (更换协议,将https协议换成http)

解压

tar xf luna.tar.gz

授权

chown -R root:root luna

12 配置nginx 

 12.1 nginx的安装

http://t.csdnimg.cn/p03bl

1.配置nginx所需环境

yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel

pcre使nginx支持http rewrite模块

openssl 使nginx支持ssl

zlib提供nginx对http包的内容进行gzip压缩

2.获取nginx压缩包

方法一:在官网(https://nginx.org/en/download.html)直接下载.tar.gz压缩包,然后直接拉到linux里面/使用rz命令上传。(1.如果压缩包拉不进去,使用yum -y install lrzsz指令,再进行拉取。2.rz命令上传需先下载rz)

yum -y install lrzsz

方法二:使用wget命令下载(需要系统提前安装wget,如果没有安装,使用yum install wget进行安装。)

3.解压

解压到 /usr/local 下

tar xzvf nginx-1.23.1.tar.gz -C /usr/local/

4.配置

进入解压后的目录下。

cd /usr/local/nginx-1.23.1/

 可以配置啦~ O(∩_∩)O哈哈~

./configure --prefix=/usr/local/nginx 

5.编译安装

make && make install

 

编译安装成功!

 12.2 配置nginx

cd /usr/local/nginx/conf/

ls命令查看

创建conf.d文件夹

mkdir conf.d

cd conf.d/

 创建并编辑Jumpserver.conf【注意:一定是以.conf结尾。】

vi Jumpserver.conf

写入内容如下:

server {listen 80;client_max_body_size 100m;  # 录像及文件上传大小限制location /luna/ {try_files $uri / /index.html;alias /opt/luna/;  # luna 路径, 如果修改安装目录, 此处需要修改}location /media/ {add_header Content-Encoding gzip;root /opt/jumpserver/data/;  # 录像位置, 如果修改安装目录, 此处需要修改}location /static/ {root /opt/jumpserver/data/;  # 静态资源, 如果修改安装目录, 此处需要修改}location /socket.io/ {proxy_pass       http://localhost:5000/socket.io/;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 /koko/ {proxy_pass       http://localhost:5000/koko/;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 / {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;}
}

 12.3 运行nginx

/usr/local/nginx/sbin/nginx

 后面加-t,显示ok,successful即表示运行成功~

 12.4 修改nginx的主配置文件

cd /usr/local/nginx/conf/

编辑nginx.conf文件。

vi nginx.conf 

编辑前:

在keepalive_timeout  65;下面添加如下命令。

include /usr/local/nginx/conf/conf.d/*.conf;

编辑后: 

编辑完成后保存退出。

重新启动nginx。

/usr/local/nginx/sbin/nginx -s reload

没有报错,就可以开始登录测试吧~

【如果报错,则表示刚才配置文件编写有问题,回去重新检查。】

13 Jumpserver登录测试

浏览器使用IP地址登录。

错误页面

 正确页面会显示Jumpserver开源堡垒机登录页面。

好啦,接下来就可以使用Jumpserver开源堡垒机啦~

创作不易,给个三连吧~

相关文章:

CentOS 7下JumpServer安装及配置(超详细版)

前言 Jumpserver是一种用于访问和管理远程设备的Web应用程序&#xff0c;通常用于对服务器进行安全访问。它基于SSH协议&#xff0c;提供了一个安全和可管理的环境来管理SSH访问。Jumpserver是基于Python开发的一款开源工具&#xff0c;其提供了强大的访问控制功能&#xff0c;…...

基于 ACK Fluid 的混合云优化数据访问(五):自动化跨区域中心数据分发

作者&#xff1a;车漾 前文回顾&#xff1a; 本系列将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景&#xff0c;相关文章请参考&#xff1a; -基于 ACK Fluid 的混合云优化数据访问&#xff08;一&#xff09;&#xff1a;场景与架构 -基于 ACK Fluid 的混合云优…...

sentinel的启动与运行

首先我们github下载sentinel Releases alibaba/Sentinel (github.com) 下载好了后输入命令让它运行即可&#xff0c;使用cmd窗口输入一下命令即可 java -Dserver.port8089 -jar sentinel-dashboard-1.8.6.jar 账号密码默认都是sentinel 启动成功后登录进去效果如下...

模拟量采集无线WiFi网络接口TCP Server, UDP, MQTT

● 4-20mA信号转换成标准Modbus TCP协议 ● 支持TCP Server, UDP, MQTT等通讯协议 ● 内置网页功能&#xff0c;可以通过网页查询数据 ● 宽电源供电范围&#xff1a;8 ~ 32VDC ● 可靠性高&#xff0c;编程方便&#xff0c;易于应用 ● 标准DIN35导轨安装&#xff0c;方便…...

五、OSPF动态路由实验

拓扑图&#xff1a; 基本ip的配置已经配置好了&#xff0c;接下来对两台路由器配置ospf协议&#xff0c;两台PC进行跨网段通讯 R1与R2构成单区域OSPF区域0&#xff0c;首先对R1进行配置 首先进入ospf 默认进程1&#xff0c;router id省略空缺&#xff0c;之后进入area 0区域&…...

系统架构设计:16 论软件开发过程RUP及其应用

目录 一 统一过程RUP 1 典型特点 2 四个阶段 (1)构思阶段(初始阶段/初启阶段)...

Gralloc ION DMABUF in Camera Display

目录 Background knowledge Introduction ia pa va and memory addressing Memory Addressing Page Frame Management Memory area management DMA IOVA and IOMMU Introduce DMABUF What is DMABUF DMABUF 关键概念 DMABUF APIS –The Exporter DMABUF APIS –The…...

【LVS】lvs的四种模式的区别是什么?

LVS中的DR模式、NAT模式、TUN模式和FANT模式是四种不同的负载均衡模式&#xff0c;它们之间的主要区别在于数据包转发方式和网络地址转换。 DR模式&#xff08;Direct Routing&#xff09;&#xff1a;此模式通过改写请求报文的目标MAC地址&#xff0c;将请求发给真实服务器&a…...

Android原生实现控件点击弹起效果方案(API28及以上)

之前在实现控件阴影时有提到过&#xff0c;阴影效果的实现采用的是Android原生的View的属性&#xff0c;拔高Z轴。Z轴会让View产生阴影的效果。 Zelevation translationZ 拔高Z轴可以通过控制elevation和translationZ。 我们之前是通过elevation来单纯的控制Z轴&#xff1b;而…...

【数据结构-队列 二】【单调队列】滑动窗口最大值

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【单调队列】&#xff0c;使用【队列】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…...

如何设置CentOS系统以禁用不必要的网络端口和服务?

要禁用CentOS系统中的不必要的网络端口和服务&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 查看当前正在运行的服务和端口&#xff1a;使用以下命令可以查看正在运行的服务和对应的端口号。 sudo netstat -tuln 2. 停用不必要的服务&#xff1a;根据netstat命令的输…...

【IDEA项目个别类爆红,但是项目可以正常运行】

打开项目时发现idea个别类爆红,但是项目可以正常运行 问题原因&#xff1a;Idea本身的问题&#xff0c;可能是其缓存问题&#xff0c;导致爆红 解决方案&#xff1a;重置Idea 很多时候排查不出代码问题&#xff0c;就尝试一下此操作。 选择目录&#xff1a;File–>Invalida…...

hive 之select 中文乱码

此处的中文乱码和mysql的库表 编码 latin utf 无关。 直接上案例。 有时候我们需要自定义一列&#xff0c;有时是汉字有时是字母&#xff0c;结果遇到这种情况了。 说实话看到这真是糟心。这谁受得了。 单独select 没有任何问题。 这是怎么回事呢&#xff1f; 经过一番检查&…...

优化|优化处理可再生希尔伯特核空间的非参数回归中的协变量偏移

原文&#xff1a;Optimally tackling covariate shift in RKHS-based nonparametric regression. The Annals of Statistics, 51(2), pp.738-761, 2023.​ 原文作者&#xff1a;Cong Ma, Reese Pathak, Martin J. Wainwright​ 论文解读者&#xff1a;赵进 编者按&#xff1a; …...

Netty深入浅出Java网络编程学习笔记(一) Netty入门篇

目录 一、概述 1、什么是Netty 2、Netty的优势 二、入门案例 1、服务器端代码 2、客户端代码 3、运行流程 组件解释 三、组件 1、EventLoop 处理普通与定时任务 关闭 EventLoopGroup 处理IO任务 服务器代码 客户端代码 分工细化 划分Boss 和Work 增加自定义EventLoopGroup 切换…...

自动化产线集控系统(西门子CNC 840D/840DSL远程控制)

1.1项目背景 RQQ/VF120机组目前为1人操作3台机床&#xff0c;需在机台旁监控。为了改善人员在班中劳动强度非常大的现状&#xff0c;调整好每台机床的节奏&#xff0c;以保证机床的最少的等待时间。本项目旨在通过远程监视设备运行过程关键参数&#xff0c;操作人员人员可远程监…...

MVVM 与 MVC区别和应用场景?

MVVM 和 MVC 1. MVC2. MVVM 1. MVC MVC 是 Model View Controller 的缩写 Model&#xff1a;模型层&#xff0c;是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View&#xff1a;视图层&#xff0c;用户界面渲染逻辑&#xff0c;通常视图…...

Linux开发-Ubuntu软件源工具

开发&验证环境&#xff1a; 操作系统&#xff1a;ubuntu 20.04 软件源&#xff1a;http://archive.ubuntu.com/ubuntu 开发工具 sudo apt install vim sudo apt install git# gnu工具链 sudo apt install gcc sudo apt install g sudo apt install gdb# llvm工具链 sudo …...

环境下载地址

1. DOTNET环境下载 适用于 Visual Studio 的 .NET SDK 下载 (microsoft.com)https://dotnet.microsoft.com/zh-cn/download/visual-studio-sdks...

E. Block Sequence-Codeforces Round 903 (Div. 3)

E. Block Sequence dp题,设dp[i]表示i~n之间的数&#xff0c;需要最小删除数量 那么每一位数有两种情况&#xff0c;设数a[i]&#xff1a; 1.被删除&#xff1a;dp[i]dp[i1]1,这一位等于上一位的加一。 2.被保留&#xff1a;dp[i]min(dp[i],dp[ia[i]1]); #include<iostream…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...