openssh服务升级到最新版本OpenSSH-9.8p1完全手册---- (只适用于centos6)

news2024/11/19 7:33:16

    

    

    

[年]

在centos6下编译openssh-9.8p1的rpm包

1、创建用于rpm编译的目录

mkdir -p /root/rpmbuild/SPEC
mkdir -p /root/rpmbuild/SOURCES

2、安装rpmbuild和一些其它的基本依赖

yum install gcc gcc-c++ rpm-build -y

 

3、上传openssh-9.8p1.tar.gz 这个源码包到centos6服务器上,并解压,解压后将SPEC文件复制到/root/rpmbuild/SPEC目录下

(源码包和askpass压缩包都在附件1里面)

将openssh-9.8的源码包和x11-ssh-askpass-1.2.4.1.tar.gz放置到 /root/rpmbuild/SOURCES 目录下

x11-ssh-askpass-1.2.4.1.tar.gz的下载地址是Index of /repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz

以上工作做完后,试运行编译

[root@centos6666 ~]# cp openssh-9.8p1/contrib/redhat/
gnome-ssh-askpass.csh  gnome-ssh-askpass.sh   openssh.spec           sshd.init              sshd.pam               
[root@centos6666 ~]# cp openssh-9.8p1/contrib/redhat/openssh.spec /root/rpmbuild/SPECS/
[root@centos6666 ~]# cd !$
cd /root/rpmbuild/SPECS/
[root@centos6666 SPECS]# rpmbuild -ba openssh.spec 
warning: line 97: prereq is deprecated: PreReq: initscripts >= 5.00
error: Failed build dependencies:
	/usr/include/security/pam_appl.h is needed by openssh-9.8p1-1.el6.x86_64
	/usr/include/X11/Xlib.h is needed by openssh-9.8p1-1.el6.x86_64
	libXt-devel is needed by openssh-9.8p1-1.el6.x86_64
	imake is needed by openssh-9.8p1-1.el6.x86_64
	gtk2-devel is needed by openssh-9.8p1-1.el6.x86_64
	krb5-devel is needed by openssh-9.8p1-1.el6.x86_64



[root@centos6666 SPECS]# ls ../SOURCES/
openssh-9.8p1.tar.gz  x11-ssh-askpass-1.2.4.1.tar.gz

可以看到还是缺少很多依赖,安装以上缺少的依赖

4、安装缺少的依赖

yum install krb5-devel gtk2-devel imake libXt-devel pam pam-devel -y

5、再次执行编译

这次基本就完成了rpm包的编译,非常快

Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: libICE.so.6()(64bit) libSM.so.6()(64bit) libX11.so.6()(64bit) libXt.so.6()(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) rtld(GNU_HASH)
Obsoletes: ssh-extras
Processing files: openssh-askpass-gnome-9.8p1-1.el6.x86_64
Provides: config(openssh-askpass-gnome) = 9.8p1-1.el6
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: libX11.so.6()(64bit) libatk-1.0.so.0()(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libcairo.so.2()(64bit) libfontconfig.so.1()(64bit) libfreetype.so.6()(64bit) libgdk-x11-2.0.so.0()(64bit) libgdk_pixbuf-2.0.so.0()(64bit) libgio-2.0.so.0()(64bit) libglib-2.0.so.0()(64bit) libgmodule-2.0.so.0()(64bit) libgobject-2.0.so.0()(64bit) libgthread-2.0.so.0()(64bit) libgtk-x11-2.0.so.0()(64bit) libpango-1.0.so.0()(64bit) libpangocairo-1.0.so.0()(64bit) libpangoft2-1.0.so.0()(64bit) libpthread.so.0()(64bit) librt.so.1()(64bit) rtld(GNU_HASH)
Obsoletes: ssh-extras
Processing files: openssh-debuginfo-9.8p1-1.el6.x86_64
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/openssh-9.8p1-1.el6.x86_64
warning: Could not canonicalize hostname: centos6666
Wrote: /root/rpmbuild/SRPMS/openssh-9.8p1-1.el6.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/openssh-9.8p1-1.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/openssh-clients-9.8p1-1.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/openssh-server-9.8p1-1.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/openssh-askpass-9.8p1-1.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/openssh-askpass-gnome-9.8p1-1.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/openssh-debuginfo-9.8p1-1.el6.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.8n4pMP
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd openssh-9.8p1
+ rm -rf /root/rpmbuild/BUILDROOT/openssh-9.8p1-1.el6.x86_64
+ exit 0

 编译产出物是在/root/rpmbuild/RPMS/x86_64目录(由于我是使用的x86架构机器编译的,因此是该目录)和SRPMS目录下

root@centos6666 SPECS]# ls -alh ../RPMS/x86_64/
total 5.6M
drwxr-xr-x 2 root root 4.0K Jul 27 20:56 .
drwxr-xr-x 3 root root 4.0K Jul 27 20:56 ..
-rw-r--r-- 1 root root 541K Jul 27 20:56 openssh-9.8p1-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  42K Jul 27 20:56 openssh-askpass-9.8p1-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  25K Jul 27 20:56 openssh-askpass-gnome-9.8p1-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 728K Jul 27 20:56 openssh-clients-9.8p1-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 3.6M Jul 27 20:56 openssh-debuginfo-9.8p1-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 660K Jul 27 20:56 openssh-server-9.8p1-1.el6.x86_64.rpm
[root@centos6666 SPECS]# ls -alh ../SRPMS/
total 1.9M
drwxr-xr-x 2 root root 4.0K Jul 27 20:56 .
drwxr-xr-x 8 root root 4.0K Jul 26 22:27 ..
-rw-r--r-- 1 root root 1.9M Jul 27 20:56 openssh-9.8p1-1.el6.src.rpm

下面是如何安全的在centos6操作系统下升级OpenSSH服务到最新版9.8p1 

 

openssh服务升级到最新版本OpenSSH-9.8p1完全手册

升级步骤

必看的重要提示:

1

建议启用telnet服务,给自己留一个后门,如果实在懒得安装,对本次sshd服务的升级比较有把握,在升级OpenSSH期间,必须保留一个可用的shell 窗口

2

务必按照本文档的操作顺序执行升级步骤,遇到服务异常的问题,冷静对待;在升级OpenSSH完成后,按本文档的测试建议进行充分的测试,确认升级无误后在关闭shell窗口

3

经常性的查看OpenSSH的服务状态,也就是service sshd status 及时发现升级中出现的问题,并按标准的流程解决所出现的问题,尽量使用yum的方式安装包括

4

附件1是OpenSSH的源码安装包和强依赖askpass,也包含有ssh-copy-id 这个简单的脚本程序

附件2是  升级安装包,包含新旧两个版本的OpenSSH,还有telnet-server安装包和lrzsz文件传输工具以及详细的word形式的升级手册

附件3是OpenSSH的一个通用的配置文件,该配置文件开放的端口定义是10022,是一个比较通用的sshd服务主配置文件,建议统一使用这个配置文件

5

请注意本文内的标红字段

第一个步骤---注入本地仓库

安装用得压缩包(也就是附件2)上传到服务器后,执行下面的命令,生成仓库,注意,压缩包要上传到root用户的根目录下

解压缩命令:

tar xf openssh-9.8p1-centos6.tar.gz

解压完毕后,执行以下命令,注入本地仓库

cat >/etc/yum.repos.d/local.repo<<EOF

[ssh]

name=ssh

baseurl=file:///root/openssh-9.8p1-centos6

enable=1

gpgcheck=0

EOF

第二个步骤:

确认sshd版本,是否需要升级,也就是查看sshd的版本,命令如下:

sshd -V

一般输出如下,sshd的版本是5.3,或者其它的确定需要升级的版本:

第三个步骤---防止升级失败的首要措施(强烈建议执行,不要投机取巧):

启用telnet服务

yum install telnet-server –y

输出如下:

安装完毕后,执行以下命令,给予telnet登陆权限:

echo pts/0>>/etc/securetty

echo pts/1>>/etc/securetty

echo pts/2>>/etc/securetty

echo pts/3>>/etc/securetty

echo pts/4>>/etc/securetty

编辑/etc/xinetd.d/telnet,disable         = yes ,yes修改为no 保存文件即可,最终如下图所示:

启动telnet服务,服务端口号是23,使用xshell等工具测试利用telnet能够成功登陆即可

telnet启动命令:

service xinetd start

Xshell等工具登陆示例:

第四个步骤---备份

主要是sshd服务的配置文件,如果升级OpenSSH彻底失败,需要利用此备份文件完全回退

命令如下:

cp -r /etc/ssh{,.bak}

第五个步骤---正式升级OpenSSH

  1. 执行以下命令升级安装OpenSSH-9.8p1
  1. 两种安装方式任选一种执行

#使用本地仓库[1]

yum install openssh-server-9.8p1 openssh-9.8p1 openssh-clients-9.8p1 -y

输出如下:

#安装lrzsz方便传输文件,安装pam-devel,以提供更多功能

yum install pam-devel lrzsz -y

#不使用本地仓库,直接本地安装[2]

cd openssh-9.8p1-centos6

yum localinstall openssh-9.8p1-1.el7.x86_64.rpm openssh-debuginfo-9.8p1-1.el7.x86_64.rpm openssh-clients-9.8p1-1.el7.x86_64.rpm openssh-server-9.8p1-1.el7.x86_64.rpm

这种方式不推荐,就不截图演示了

  1. 配置文件赋权[3]

chmod 0600 /etc/ssh/ssh_host_ed25519_key

chmod 0600 /etc/ssh/ssh_host_rsa_key

  1. 通用配置文件自动注入[4]

由于通用配置文件内容较多,请直接查看附件4,这里就不重复了

  1. Sshd服务重启,使得配置生效,激活新sshd服务[5]

  service ssdh restart

  1. 免密功能的恢复[6]

cp ssh-copy-id /usr/bin/  && chmod a+x /usr/bin/ssh-copy-id

如果升级sshd服务彻底失败后的回退方案[7]

  1. 删除新版本的OpenSSH

for i in `rpm -qa |grep openssh`;do rpm -e $i --nodeps ;done

2)安装旧版本的OpenSSH

两种安装方式任意选择一种即可,不用考虑原来的OpenSSH是哪个版本

###安装旧版的OpenSSH方式

这种方式是使用本地仓库,执行下面的安装命令即可:

yum install openssh-clients-5.3p1 openssh-server-5.3p1 openssh-5.3p1 –y

3)配置文件恢复:

\cp –f /etc/ssh.bak/sshd_config /etc/ssh/

 4)  重启OpenSSH服务

service sshd restart

检查确认是否升级成功

  1. 查看sshd的版本号

sshd –V

正确的输出日志如下:

#如果和上面的日志不一致,请检查服务是否正常升级安装

  1. 重启sshd服务,查看服务状态是否有报错:

  service sshd restart && service sshd status

一般输出如下:,第一个红色可以忽略不管,只需要关心服务是否正常启动

sshd服务的自启动说明

在centos6 版本下,sshd服务是由chkconfig控制自启的,因此,自启命令为(正常情况为无输出):

chkconfig --add sshd

chkconfig sshd on

测试sshd功能是否正常[i]

      1. 使用ssh命令远程连接一个服务器,看是否可以正常连接到,这是测试ssh客户端功能
      2. 利用xshell等运维工具,打开一个新的远程连接窗口,确认可正常登陆,这是测试ssh服务端功能
      3. 使用ssh-copy-id命令配置一次免密登陆,确认该工具是否正常
      4. 使用scp  命令传送任意的测试文件,确认sshd功能完整正常

清理升级过程的垃圾文件并关闭telnet服务

在确认sshd服务升级安装成功后

  1. 删除以上用到的仓库文件,仓库文件在/etc/yum.repos.d目录下
  2. 删除openssh-9.8p1-centos6.tar.gz 这个安装包
  3. 删除/root/ openssh-9.8p1-centos6这个目录
  4. 停止telnet服务,命令为service xinetd stop

输出如下:

一些常见的错误的处理流程

*(这些是centos7下升级sshd时的报错,目前在centos6,升级sshd还没有遇到任何错误,以后遇到了在记录,这些仅供参考)

  1.  第一种sshd服务状态错误情况(在cetos6还没遇到错误,这个是cetos7的,以后遇到了在补充):

如果有遇到sshd服务状态(systemctl status sshd命令)里带有Permissions字样的报错,例如下面这样的:

[root@pg2 aarch64]# systemctl status sshd

● sshd.service - SYSV: OpenSSH server daemon

   Loaded: loaded (/etc/rc.d/init.d/sshd; bad; vendor preset: enabled)

   Active: active (running) since Thu 2024-07-11 12:58:12 CST; 10s ago

     Docs: man:systemd-sysv-generator(8)

  Process: 30984 ExecStop=/etc/rc.d/init.d/sshd stop (code=exited, status=0/SUCCESS)

  Process: 31113 ExecStart=/etc/rc.d/init.d/sshd start (code=exited, status=0/SUCCESS)

 Main PID: 31121 (sshd)

   CGroup: /system.slice/sshd.service

           └─31121 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups

Jul 11 12:58:12 pg2 sshd[31113]: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Jul 11 12:58:12 pg2 sshd[31113]: Permissions 0640 for '/etc/ssh/ssh_host_ecdsa_key' are too open.

Jul 11 12:58:12 pg2 sshd[31113]: It is required that your private key files are NOT accessible by others.

Jul 11 12:58:12 pg2 sshd[31113]: This private key will be ignored.

Jul 11 12:58:12 pg2 sshd[31113]: Unable to load host key "/etc/ssh/ssh_host_ecdsa_key": bad permissions

Jul 11 12:58:12 pg2 sshd[31113]: Unable to load host key: /etc/ssh/ssh_host_ecdsa_key

Jul 11 12:58:12 pg2 sshd[31121]: Server listening on 0.0.0.0 port 10022.

Jul 11 12:58:12 pg2 sshd[31113]: [  OK  ]

Jul 11 12:58:12 pg2 sshd[31121]: Server listening on :: port 10022.

提示有哪些报错的文件赋权,赋权后重启sshd服务,示例如下:

chmod 0600 /etc/ssh/ssh_host_ecdsa_key

systemctl restart sshd

  1. 第二种sshd服务状态错误的情况:

如果sshd服务状态(systemctl status sshd命令)内有format字样,需要回退到低版本7.4p,回退步骤见上面的回退方案,然后重新生成sshd服务的证书文件,一般是四个

[root@pg1 aarch64]# chmod -Rf 0600 /etc/ssh/

[root@pg1 aarch64]# systemctl restart sshd

[root@pg1 aarch64]# systemctl status sshd

● sshd.service - SYSV: OpenSSH server daemon

   Loaded: loaded (/etc/rc.d/init.d/sshd; bad; vendor preset: enabled)

   Active: active (running) since Thu 2024-07-11 14:14:39 CST; 11s ago

     Docs: man:systemd-sysv-generator(8)

  Process: 65356 ExecStart=/etc/rc.d/init.d/sshd start (code=exited, status=0/SUCCESS)

 Main PID: 65364 (sshd)

   CGroup: /system.slice/sshd.service

           └─65364 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups

Jul 11 14:14:39 pg1 systemd[1]: Starting SYSV: OpenSSH server daemon...

Jul 11 14:14:39 pg1 sshd[65356]: Starting sshd:Unable to load host key "/etc/ssh/ssh_host_rsa_key": invalid format

Jul 11 14:14:39 pg1 sshd[65356]: Unable to load host key: /etc/ssh/ssh_host_rsa_key

Jul 11 14:14:39 pg1 sshd[65356]: Unable to load host key "/etc/ssh/ssh_host_ecdsa_key": invalid format

Jul 11 14:14:39 pg1 sshd[65356]: Unable to load host key: /etc/ssh/ssh_host_ecdsa_key

Jul 11 14:14:39 pg1 sshd[65364]: Server listening on 0.0.0.0 port 10022.

Jul 11 14:14:39 pg1 sshd[65364]: Server listening on :: port 10022.

Jul 11 14:14:39 pg1 sshd[65356]: [  OK  ]

Jul 11 14:14:39 pg1 systemd[1]: Started SYSV: OpenSSH server daemon.

命令如下:

ssh-keygen -t rsa  -f /etc/ssh/ssh_host_rsa_key

ssh-keygen -t ecdsa  -f /etc/ssh/ssh_host_ecdsa_key

ssh-keygen -t ecdsa  -f /etc/ssh/ssh_host_ecdsa_key

ssh-keygen -t ed25519  -f /etc/ssh/ssh_host_ed25519_key

以上命令都需要先手动输入y,表示同意覆盖,然后回车直到命令结束

证书文件生成后,在利用for循环命令删除低版本sshd,然后再次升级sshd就可以正常升级完成了,如果懒得修改配置文件,直接使用附件4命令即可,建议还是重复上面的正式升级步骤

附件1:OpenSSH-9.8p1的源码安装包和askpass

链接: https://pan.baidu.com/s/1V08KtiDrm8aH_St60KMFPw?pwd=xju7 提取码: xju7 
 

附件2:OpenSSH-9.8p1的本地仓库文件和OpenSSH-9.8p1的升级手册

链接: https://pan.baidu.com/s/1xf1ujEIEe2TqQbsfU5t4IA?pwd=5ny2 提取码: 5ny2 

附件3:

通用的sshd主配置文件:

cat >/etc/ssh/sshd_config<<EOF

#     $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $

# This is the sshd server system-wide configuration file.  See

# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/openssh/bin

# The strategy used for options in the default sshd_config shipped with

# OpenSSH is to specify options with their default value where

# possible, but leave them commented.  Uncommented options override the

# default value.

#Port 22

Port 10022

#AddressFamily any

#ListenAddress 0.0.0.0

#ListenAddress ::

#HostKey /usr/local/openssh/etc/ssh_host_rsa_key

#HostKey /usr/local/openssh/etc/ssh_host_ecdsa_key

#HostKey /usr/local/openssh/etc/ssh_host_ed25519_key

# Ciphers and keying

#RekeyLimit default none

# Logging

#SyslogFacility AUTH

#LogLevel INFO

# Authentication:

#LoginGraceTime 2m

#PermitRootLogin yes

#StrictModes yes

#MaxAuthTries 6

#MaxSessions 10

#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2

# but this is overridden so installations will only check .ssh/authorized_keys

AuthorizedKeysFile .ssh/authorized_keys

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none

#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /usr/local/openssh/etc/ssh_known_hosts

#HostbasedAuthentication no

# Change to yes if you don't trust ~/.ssh/known_hosts for

# HostbasedAuthentication

#IgnoreUserKnownHosts no

# Don't read the user's ~/.rhosts and ~/.shosts files

#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!

#PasswordAuthentication yes

#PermitEmptyPasswords no

# Change to no to disable s/key passwords

#ChallengeResponseAuthentication yes

# Kerberos options

#KerberosAuthentication no

#KerberosOrLocalPasswd yes

#KerberosTicketCleanup yes

#KerberosGetAFSToken no

# GSSAPI options

#GSSAPIAuthentication no

#GSSAPICleanupCredentials yes

# Set this to 'yes' to enable PAM authentication, account processing,

# and session processing. If this is enabled, PAM authentication will

# be allowed through the ChallengeResponseAuthentication and

# PasswordAuthentication.  Depending on your PAM configuration,

# PAM authentication via ChallengeResponseAuthentication may bypass

# the setting of "PermitRootLogin without-password".

# If you just want the PAM account and session checks to run without

# PAM authentication, then enable this but set PasswordAuthentication

# and ChallengeResponseAuthentication to 'no'.

#UsePAM no

#AllowAgentForwarding yes

#AllowTcpForwarding yes

#GatewayPorts no

#X11Forwarding no

#X11DisplayOffset 10

#X11UseLocalhost yes

#PermitTTY yes

#PrintMotd yes

#PrintLastLog yes

#TCPKeepAlive yes

#PermitUserEnvironment no

#Compression delayed

#ClientAliveInterval 0

#ClientAliveCountMax 3

#UseDNS no

#PidFile /var/run/sshd.pid

#MaxStartups 10:30:100

#PermitTunnel no

#ChrootDirectory none

#VersionAddendum none

# no default banner path

#Banner none

# override default of no subsystems

Subsystem   sftp     /usr/libexec/openssh/sftp-server

# Example of overriding settings on a per-user basis

#Match User anoncvs

#     X11Forwarding no

#     AllowTcpForwarding no

#     PermitTTY no

#     ForceCommand cvs server

PermitRootLogin yes

PubkeyAuthentication yes

EOF

 

[1] #安装方式可以使用本地仓库,也可以直接本地安装,不通过仓库,两种安装方式,任选一个就可以了,建议优先使用yum install这个命令,此方式会自动卸载旧的OpenSSH,可以避免一些不必要的麻烦

[2] #安装方式可以使用本地仓库,也可以直接本地安装,不通过仓库,两种安装方式,任选一个就可以了,建议优先使用yum install这个命令,此方式会自动卸载旧的OpenSSH,可以避免一些不必要的麻烦

[3] 权限不能太高,因此是0600,如果发现sshd服务状态有报错的情况下

[4] ###使用附件4,通用的OpenSSH服务配置文件,复制附件4,在shell内执行即可,可自动注入覆盖 OpenSSH的配置文件

[5] ###重新启动sshd服务,并查看sshd服务状态,如果sshd服务一切正常的话

[6] ###缺失的ssh-copy-id命令拷贝到操作系统的环境变量内

[7] 回退方案说明:如果新OpenSSH-9.8p1升级后,发现服务有异常并且在短期内无法解决的错误,例如,sshd服务异常断开,此时可以利用telnet-server 服务远程登陆服务器并按下面的步骤执行回退

 

[i] 建议测试的时候不要遗漏,sshd服务是重要的服务,不能容忍升级失败

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

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

相关文章

一篇文章教你如何读懂 JMeter聚合报告参数!

在进行性能测试时&#xff0c;JMeter是一款备受推崇的开源工具。而其中的聚合报告&#xff08;Aggregate Report&#xff09;是我们分析测试结果、了解系统性能的重要依据。今天&#xff0c;我们就来深入探讨如何读懂JMeter聚合报告中的各项参数。 面对复杂的聚合报告&#xf…

MySQL创建表完全指南-从零开始学习数据库设计

MySQL创建表快速指南 在大数据时代,掌握数据库技能至关重要。无论你是刚入门的开发者,还是经验丰富的数据分析师,了解如何创建MySQL表格都是必备技能。本文将为你详细讲解MySQL创建表格的全过程,帮助你快速上手数据库设计。 1. 连接到MySQL服务器 首先,确保你已经安装了MyS…

Linux 的超级记事本(代码编辑器) —— vim

Linux 的超级记事本&#xff08;代码编辑器&#xff09; —— vim 关于 vimvim 的使用入门级使用——多模式基础使用——多模式插入模式&#xff08;Insert mode&#xff09;理解 命令模式&#xff08;command mode&#xff09;理解命令集 底行模式&#xff08;last line mode&…

Logback 快速入门

一、简介 Java 开源日志框架&#xff0c;以继承改善 log4j 为目的而生&#xff0c;是 log4j 创始人 Ceki Glc 的开源产品。 它声称有极佳的性能&#xff0c;占用空间更小&#xff0c;且提供其他日志系统缺失但很有用的特性。 其一大特色是&#xff0c;在 logback-classic 中本…

5G 基站特有的 5 个关键同步挑战

随着 5G 的推出和 O-RAN 联盟等举措&#xff0c;移动设备领域正在遭遇相当大的颠覆&#xff0c;这当然适用于基站和移动回程。 从手机到物联网设备&#xff0c;设备数量呈爆炸式增长&#xff0c;再加上移动视频流、工业物联网和汽车应用等新应用&#xff0c;给移动网络带来了容…

自学JavaScript(放假在家自学第一天)

目录 JavaScript介绍分为以下几点 1.1 JavaScript 是什么 1.2JavaScript书写位置 1.3 Javascript注释 1.4 Javascript结束符 1.5 Javascript输入输出语法 JavaScript(是什么?) 是一种运行在客户端(浏览器)的编程语言&#xff0c;实现人机交互效果。 2.作用(做什么?)网…

算法-插入排序

插入排序步骤 前面文章分享了两种排序算法&#xff1a;冒泡排序和选择排序。虽然它们的效率都是O(N2)&#xff0c;但其实选择排序比冒泡排序快一倍。现在来学第三种排序算法——插入排序。你会发现&#xff0c;顾及最坏情况以外的场景将是多么有用。 插入排序包括以下步骤。 …

从0开始搭建vue + flask 旅游景点数据分析系统(一):创建前端项目

根据前面的爬虫课程&#xff0c;我们重新开一个坑&#xff0c;就是基于爬取到的数据&#xff0c;搭建一个vueflask的前后端分离的数据分析系统 1 通过这个系列教程可以学习到什么&#xff1f; 从0开始搭建一个 vue flask 的数据分析系统&#xff1b;了解系统的整体架构&…

BSPTool工具

BSPTool工具 链接&#xff1a;https://pan.baidu.com/s/1UxMPjJtCHHkadFwnOfLqww?pwd1234 提取码&#xff1a;1234 1.使用方式 下载下来后&#xff0c;双击exe即可 2.MTK常用工具 2.1 MTK导出日志功能 2.2 导fulldump日志 2.3 .合并日志: 2.4 ADB指令集合 2.5 Fastboot指…

传统自然语言处理(NLP)与大规模语言模型(LLM)详解

自然语言处理&#xff08;NLP&#xff09;和大规模语言模型&#xff08;LLM&#xff09;是理解和生成人类语言的两种主要方法。本文将介绍传统NLP和LLM的介绍、运行步骤以及它们之间的比较&#xff0c;帮助新手了解这两个领域的基础知识。 传统自然语言处理&#xff08;NLP&…

指针!!C语言(第三篇)

目录 一. 二维数组传参的本质 二. 函数指针变量和函数指针数组 三. typedef关键字 四. 转移表 五. 回调函数以及qsort使用举例 一. 二维数组传参的本质 &#x1f35f;首先我们先回顾一下二维数组是怎样传参的&#xff1f;我们需要传入数组名以及行数和列数&#xff0c;这…

VS C++ Project(项目)的工作目录设置

如果只是简单创建一个VS CProject或者MFC Project&#xff0c;可能很多时候&#xff0c;只关心将Project放在硬盘的那个位置&#xff0c;与Project目录相关的的其他问题&#xff0c;并不引人注意&#xff0c;我们也不是十分在意。有时我们不得不进行工作目录方面的设置&#xf…

Javascript前端面试(七)

JavaScript 部分 1. JavaScript 有哪些数据类型&#xff0c;它们的区别&#xff1f; JavaScript 共有八种数据类型&#xff0c;分别是 Undefined、Null、Boolean、 Number、String、Object、Symbol、BigInt。 其中 Symbol 和 BigInt 是 ES6 中新增的数据类型&#xff1a; ●Sym…

卷积神经网络(一)---原理和结构

在介绍卷积神经网络之前&#xff0c;先提出三个观点&#xff0c;正是这三个观点使得卷积神经网络能够真正起作用。 1. 局部性 对于一张图片而言&#xff0c;需要检测图片中的特征来决定图片的类别&#xff0c;通常情况下这些特征都不是由整张图片决定的&#xff0c;而是由一些…

暑期集训周报三

题解 SMU Summer 2024 Contest Round 8-CSDN博客 CSDN 积累题目 dp 1.花店橱窗 思路&#xff1a;用dp[i][j]表示第i个放在j位置上的最大价值&#xff0c;那么我们可以枚举i-1被放在了区间[i-1,j-1]的那个位置&#xff0c;找到最大价值部分&#xff0c;然后更新dp[i][j]&a…

gitee的远程连接与公钥SSH的连接

目录 1. 登录注册gitee1.1 登录注册1.2 创建仓库 2. 远程连接3. 公钥连接4. 参考链接 1. 登录注册gitee 1.1 登录注册 gitee官网 进入后进行登录注册 1.2 创建仓库 2. 远程连接 在你想要上传文件的文件夹中进行git初始化&#xff08;我在其他文章已经写过&#xff0c;链接…

FastAPI(七十六)实战开发《在线课程学习系统》接口开发-- 课程详情

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 这个接口用户可以不登录&#xff0c;因为我们的课程随意浏览 那么我们梳理下这里的逻辑 1.根据课程id判断课程是否存在 2.课程需要返回课程的详情 3…

X-AnyLabeling标注软件使用方法

第一步 下载 官方X-AnyLabeling下载地址 github&#xff1a;X-AnyLabeling 第二步 配置环境 使用conda创建新的虚拟环境 conda create -n xanylabel python3.8进入环境 conda activate xanylabel进入X-AnyLabeling文件夹内&#xff0c;运行下面内容 依赖文件系统环境运行环…

【把玩数据结构】详解队列

目录 队列介绍队列概念队列的结构生活中的队列 队列的实现队列的初始化队列的销毁队尾入队列队头出队列获得队头元素获得队尾元素统计队列元素个数 队列介绍 队列概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表。队列遵…

Python 代码中的 yield 到底是什么鬼?

在Python编程中&#xff0c;有一个强大而神秘的关键字&#xff0c;那就是yield。初学者常常被它搞得晕头转向&#xff0c;而高级开发者则借助它实现高效的代码。到底yield是什么&#xff1f;它又是如何在Python代码中发挥作用的呢&#xff1f;让我们一起来揭开它的面纱。 Pyth…