【Linux网络】SSH服务

目录

一、SSH概述与使用

1.1 定义

1.2 优点

1.3 原理

1.4 命令登录

1.5 跳板登录

1.6  远程控制

二、SSH配置

2.1 常用的服务端配置

 2.2 ssh服务最优配置

三、免密登录

3.1 操作原理

3.2 操作步骤


一、SSH概述与使用

1.1 定义

SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。

1.2 优点

  • 数据传输是加密的,可以防止信息泄漏

  • 数据传输是压缩的,可以提高传输速度

1.3 原理

  1. 客户端发起链接请求

  2. 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)

  3. 客户端生成密钥对

  4. 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密

  5. 客户端发送加密值到服务端,服务端用私钥解密,得到Res

  6. 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)

  7. 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密

1.4 命令登录

ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port

#当登录的远程主机的用户为超级管理员,则可以省略主机名和@

#不加p选项,默认端口为22
#一般,当端口被更改时,才需要加上选项p

若想要关闭安全验证,可以修改以下配置文件/etc/ssh/ssh_config:

vim /etc/ssh/ssh_config

        ...
        ...
        ...                     修改为 
#StrictHostKeyChecking ask   ----------> StrictHostKeyChecking no
        ...   
        ...
        ...

:wq
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l :-l 选项,指定登录名称。
-p: -p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)

1.5 跳板登录

该方式一般用于远端机器拒绝当前设备的IP访问,从而需要通过其他设备来连接到远端机器

                                                                 步骤如下

1. 先模拟拒绝访问的情景

#远端设备的配置
iptables -A INPUT -s 当前需要访问远端设备的主机IP -j REJECT

2.1 使用ssh的-t选项进行跳板登录

ssh -t IP1  ssh -t IP2.... ssh -t 目标IP
# IP1和IP2为跳板机的IP地址,先跳转到IP1,再跳转到IP2
#两次跳转成功后,才能远程连接到目标设备

#举例#
ssh -t 设备1IP ssh -t 设备2IP ssh -t 目的设备IP 
#跳转两次,从当前设备远程连接IP地址为最终目的主机或者服务器

2.2 使用ssh的-J选项进行跳板登录

ssh   -J   IP1,IP2...    目标IP
#IP1 IP2为中间设备的IP地址

#举例
ssh   -J   设备1IP,设备2IP   目的设备IP

1.6  远程控制

不登陆到远端设备,而将命令的输出打印到本机

ssh    远端IP    cmd(命令)
#直接在ssh命令后跟上想要使用的命令

二、SSH配置

2.1 常用的服务端配置

                                                              修改默认端口

vim /etc/ssh/sshd_config
          ...
          ...
          ...
Port 22 -------> Port 自定义端口号
                                                             禁用root用户登录
vim /etc/ssh/sshd_config
          ...
          ...
          ...
#PermitRootLogin yes ---------> PermitRootLogin no
注意,虽然不允许root登录,但是使用普通用户,仍然可以是用su命令切换至root
                                                             白名单黑名单列表
vim /etc/ssh/sshd_config
        ...
        ...
        ...
#在末行手动添加
AllowUsers zhangsan@192.168.91.101  lisi
#只允许192.168.91.101设备以zhangsan的身份访问本机
#允许所有的主机访问本机的lisi用户
DenyUsers  liwu
#不允许所有的设备访问本机的liwu

                                                                 输错密码限制

vim /etc/ssh/sshd_config
        ...   
        ...
        ...
MaxAuthTries 2
#最大输错次数为2,默认值为3


ssh -o NumberOfPasswordPrompts=8  root@192.168.91.100
#设置尝试次数为8 

 2.2 ssh服务最优配置

  1. 建议使用非默认端口 22

  2. 禁止使用protocol version 1

  3. 限制可登录用户 白名单

  4. 设定空闲会话超时时长

  5. 利用防火墙设置ssh访问策略

  6. 仅监听特定的IP地址 公网 内网

  7. 基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs

  8. 使用基于密钥的认证

  9. 禁止使用空密码

  10. 禁止root用户直接登录

  11. 限制ssh的访问频度和并发在线数

  12. 经常分析日志 分离

#############1. 关于 SSH Server 的整体设定##############
#Port 22    
##port用来设置sshd监听的端口,为了安全起见,建议更改默认的22端口为5位以上陌生端口
#Protocol 2,1
Protocol 2
##设置协议版本为SSH1或SSH2,SSH1存在漏洞与缺陷,选择SSH2
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress用来设置sshd服务器绑定的IP地址
##监听的主机适配卡,举个例子来说,如果您有两个 IP, 分别是 192.168.0.11 及 192.168.2.20 ,那么只想要
###开放 192.168.0.11 时,就可以设置为:ListenAddress 192.168.0.11
####表示只监听来自 192.168.0.11 这个 IP 的SSH联机。如果不使用设定的话,则预设所有接口均接受 SSH

#############2. 说明主机的 Private Key 放置的档案##########                 
#ListenAddress ::
##HostKey用来设置服务器秘钥文件的路径
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
##设置SSH version 1 使用的私钥

# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
##设置SSH version 2 使用的 RSA 私钥

#HostKey /etc/ssh/ssh_host_dsa_key
##设置SSH version 2 使用的 DSA 私钥


#Compression yes      
##设置是否可以使用压缩指令

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
##KeyRegenerationInterval用来设置多长时间后系统自动重新生成服务器的秘钥,
###(如果使用密钥)。重新生成秘钥是为了防止利用盗用的密钥解密被截获的信息。

#ServerKeyBits 768
##ServerKeyBits用来定义服务器密钥的长度
###指定临时服务器密钥的长度。仅用于SSH-1。默认值是 768(位)。最小值是 512 。


# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
##SyslogFacility用来设定在记录来自sshd的消息的时候,是否给出“facility code”
当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV,sshd 服务日志存放在:/var/log/secure。
#LogLevel INFO
##LogLevel用来设定sshd日志消息的级别
定义登录记录的等级

#################3.安全认证方面的设定################
#############3.1、有关安全登录的设定###############
# Authentication:
限制用户必须在指定的时限内认证成功,0 表示无限制。默认值是 120 秒。

#LoginGraceTime 2m
LoginGraceTime用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为妙

#PermitRootLogin yes
PermitRootLogin用来设置能不能直接以超级用户ssh登录,root远程登录Linux很危险,建议注销或设置为no

#StrictModes yes
StrictModes用来设置ssh在接收登录请求之前是否检查用户根目录和rhosts文件的权限和所有权,建议开启
建议使用默认值"yes"来预防可能出现的低级错误。

#RSAAuthentication yes
##RSAAuthentication用来设置是否开启RSA密钥验证,只针对SSH1

#PubkeyAuthentication yes
##PubkeyAuthentication用来设置是否开启公钥验证,如果使用公钥验证的方式登录时,则设置为yes

#AuthorizedKeysFile     .ssh/authorized_keys
AuthorizedKeysFile用来设置公钥验证文件的路径,与PubkeyAuthentication配合使用,默认值是".ssh/authorized_keys"。
该指令中可以使用下列根据连接时的实际情况进行展开的符号: %% 表示'%'、%h 表示用户的主目录、%u 表示该用户的用户名
经过扩展之后的值必须要么是绝对路径,要么是相对于用户主目录的相对路径。

 

#############3.2、安全验证的设定###############
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证)。仅用于SSH-1。
这是通过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv 进行认证的。出于安全考虑,建议使用默认值"no"。

# similar for protocol version 2
HostbasedAuthentication no
这个指令与 RhostsRSAAuthentication 类似,但是仅可以用于SSH-2。

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

#IgnoreUserKnownHosts no
IgnoreUserKnownHosts用来设置ssh在进行RhostsRSAAuthentication安全验证时是否忽略用户的“/$HOME/.ssh/known_hosts”文件
Don't read the user's ~/.rhosts and ~/.shosts files

#IgnoreRhosts yes
IgnoreRhosts用来设置验证的时候是否使用“~/.rhosts”和“~/.shosts”文件

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
PasswordAuthentication用来设置是否开启密码验证机制,如果用密码登录系统,则设置yes

#PermitEmptyPasswords no
PermitEmptyPasswords用来设置是否允许用口令为空的账号登录系统,设置no

#PasswordAuthentication yes
是否允许使用基于密码的认证。默认为"yes"。
PasswordAuthentication yes

# Change to no to disable s/key passwords
设置禁用s/key密码
ChallengeResponseAuthentication yes
ChallengeResponseAuthentication 是否允许质疑-应答(challenge-response)认证
ChallengeResponseAuthentication no

 

########3.3、与 Kerberos 有关的参数设定,指定是否允许基于Kerberos的用户认证########
#Kerberos options
KerberosAuthentication no
是否要求用户为PasswdAuthentication提供的密码必须通过Kerberos KDC认证,要使用Kerberos认证,
服务器必须提供一个可以校验KDC identity的Kerberos servtab。默认值为no

KerberosOrLocalPasswd yes
如果Kerberos密码认证失败,那么该密码还将要通过其他的的认证机制,如/etc/passwd
在启用此项后,如果无法通过Kerberos验证,则密码的正确性将由本地的机制来决定,如/etc/passwd,默认为yes

KerberosTicketCleanup yes
设置是否在用户退出登录是自动销毁用户的ticket

KerberosGetAFSToken no
如果使用AFS并且该用户有一个Kerberos 5 TGT,那么开启该指令后,
将会在访问用户的家目录前尝试获取一个AFS token,并尝试传送 AFS token 给 Server 端,默认为no

 

3.4、与 GSSAPI 有关的参数设定,指定是否允许基于GSSAPI的用户认证,仅适用于SSH2####
GSSAPI 是一套类似 Kerberos 5 的通用网络安全系统接口。
如果你拥有一套 GSSAPI库,就可以通过 tcp 连接直接建立 cvs 连接,由 GSSAPI 进行安全鉴别。

GSSAPI options
GSSAPIAuthentication no
GSSAPIAuthentication 指定是否允许基于GSSAPI的用户认证,默认为no

GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
GSSAPICleanupCredentials 设置是否在用户退出登录是自动销毁用户的凭证缓存
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 mechanism.
# Depending on your PAM configuration, this may bypass the setting of
# PasswordAuthentication, PermitEmptyPasswords, and
# "PermitRootLogin without-password". If you just want the PAM account and
# session checks to run without PAM authentication, then enable this but set
# ChallengeResponseAuthentication=no
#UsePAM no
##设置是否通过PAM验证
UsePAM yes

# Accept locale-related environment variables
##AcceptEnv 指定客户端发送的哪些环境变量将会被传递到会话环境中。
###[注意]只有SSH-2协议支持环境变量的传递。指令的值是空格分隔的变量名列表(其中可以使用'*'和'?'作为通配符)。
####也可以使用多个 AcceptEnv 达到同样的目的。需要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量。
#####由于这个原因,该指令应当小心使用。默认是不传递任何环境变量。

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL
AllowTcpForwarding yes

##AllowTcpForwarding设置是否允许允许tcp端口转发,保护其他的tcp连接

#GatewayPorts no
##GatewayPorts 设置是否允许远程客户端使用本地主机的端口转发功能,出于安全考虑,建议禁止

 

#############3.5、X-Window下使用的相关设定###############

#X11Forwarding no
##X11Forwarding 用来设置是否允许X11转发
X11Forwarding yes

#X11DisplayOffset 10
##指定X11 转发的第一个可用的显示区(display)数字。默认值是 10 。
###可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。
X11DisplayOffset 10

#X11UseLocalhost yes

 

#################3.6、登入后的相关设定#################

#PrintMotd yes
##PrintMotd用来设置sshd是否在用户登录时显示“/etc/motd”中的信息,可以选在在“/etc/motd”中加入警告的信息

#PrintLastLog yes
#PrintLastLog 是否显示上次登录信息

#TCPKeepAlive yes
##TCPKeepAlive 是否持续连接,设置yes可以防止死连接
###一般而言,如果设定这项目的话,那么 SSH Server 会传送 KeepAlive 的讯息给 Client 端,以确保两者的联机正常!
####这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。在这个情况下,任何一端死掉后, SSH 可以立刻知道,而不会有僵尸程序的发生!

#UseLogin no
##UseLogin 设置是否在交互式会话的登录过程中使用。默认值是"no"。
###如果开启此指令,那么X11Forwarding 将会被禁止,因为login不知道如何处理 xauth cookies 。
####需要注意的是,在SSH底下本来就不接受 login 这个程序的登入,如果指UsePrivilegeSeparation ,那么它将在认证完成后被禁用。
UserLogin no       

#UsePrivilegeSeparation yes
##UsePrivilegeSeparation 设置使用者的权限
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no

#UseDNS yes
##UseDNS是否使用dns反向解析

#PidFile /var/run/sshd.pid

#MaxStartups 10
##MaxStartups 设置同时允许几个尚未登入的联机,当用户连上ssh但并未输入密码即为所谓的联机,
###在这个联机中,为了保护主机,所以需要设置最大值,预设为10个,而已经建立联机的不计算入内,
####所以一般5个即可,这个设置可以防止恶意对服务器进行连接

#MaxAuthTries 6
##MaxAuthTries 用来设置最大失败尝试登陆次数为6,合理设置辞职,可以防止攻击者穷举登录服务器
#PermitTunnel no

 

############3.7、开放禁止用户设定############

#AllowUsers<用户名1> <用户名2> <用户名3> ...
##指定允许通过远程访问的用户,多个用户以空格隔开

#AllowGroups<组名1> <组名2> <组名3> ...
##指定允许通过远程访问的组,多个组以空格隔开。当多个用户需要通过ssh登录系统时,可将所有用户加入一个组中。

#DenyUsers<用户名1> <用户名2> <用户名3> ...
##指定禁止通过远程访问的用户,多个用户以空格隔开

#DenyGroups<组名1> <组名2> <组名3> ...
##指定禁止通过远程访问的组,多个组以空格隔开。

# no default banner path
#Banner /some/path

# override default of no subsystems
Subsystem       sftp    /usr/libexec/openssh/sftp-server
ClientAliveInterval 3600
ClientAliveCountMax 0

 

三、免密登录

3.1 操作原理

基于密码的登陆方式

  1. 客户端发起ssh请求,服务器会把自己的公钥发送给用户

  2. 用户会根据服务器发来的公钥对密码进行加密

  3. 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

基于密钥的登陆方式 

  1. 首先在客户端生成一对密钥(ssh-keygen)

  2. 并将客户端的公钥ssh-copy-id 拷贝到服务端

  3. 当客户端再次发送一个连接请求,包括ip、用户名

  4. 服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:kgc

  5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端

  6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端

  7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

3.2 操作步骤

第一步:客户端生成密钥
第二步:传密钥给服务端

具体实现如下:

客户端IP:192.168.254.20

服务端IP:192.168.254.10


目的:使得客户端访问服务端时,使用密钥方式实现免密登录

1) 生成密钥

ssh-keygen [-t]  #生成密钥文件 

-t #指定加密方式,不加此则默认使用rsa方式加密
Enter file in which to save the key(/root/.ssh/id_rsa): 直接回车
#选择密钥文件存放的位置                 (默认路径)
Enter passphrase (empty for no passphrase): 
#对密钥文件进行加密,设置密码后,访问文件需要输入密码
#一般不输入密码 直接回车
Enter same passphrase again: 

 

2) 传递公钥文件至服务器

ssh-copy-id -i  公钥文件  [用户名]@服务器IP
ssh-copy-id   -i   id_rsa.pub   192.168.254.10

3)测试是否成功免密登录

ssh 192.168.254.10

 

补充:

若设置了密钥文件的访问密码,可以使用代理来免去每次登陆时输入文件密码

ssh-agent bash
#开启代理

ssh-add
Enter passphrase for /root/.ssh/id_rsa:
#输入密钥文件的密码即可


ssh 192.168.254.10
#免密登录

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】滑动窗口:最大连续1的个数

1.题目 2.算法思路 其实在做这道题的时候并不需要真的把0翻转成1&#xff0c;只需要找到最长的子数组且该子数组中0的个数不大于K&#xff0c;就可以了&#xff01; 当然我们首先想到的是暴力穷举法&#xff1a; 找到所有符合题意的子数组&#xff0c;跳出最长的那个就可以了…

Integer中的缓存机制

先看一个示例&#xff1a; public static void main(String[] args) {Integer a127;Integer b127;System.out.println(ab);Integer c128;Integer d128;System.out.println(cd);} 输出&#xff1a; true false 为什么明明都是同一个数字进行比较&#xff0c;当数字等于127的…

JVM笔记-常用命令

1、jstat jstat是一个极强的监视JVM的工具&#xff0c;可以用来监视JVM的各种堆和非堆的大小以及内存使用量。 Usage: jstat -help|-optionsjstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]jstat的常用用法如图所示&#xff…

Matlab各个版本介绍、区别分析及推荐

MATLAB&#xff0c;由美国MathWorks公司出品&#xff0c;是一款广泛应用的商业数学软件。自其诞生之初&#xff0c;MATLAB便以其强大的矩阵计算能力、灵活的编程环境以及广泛的应用领域&#xff0c;赢得了全球科研工作者和工程师的青睐。本文将详细介绍MATLAB的各个版本&#x…

蓝桥杯练习系统(算法训练)ALGO-950 逆序数奇偶

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 老虎moreD是一个勤于思考的青年&#xff0c;线性代数行列式时&#xff0c;其定义中提到了逆序数这一概念。不过众所周知我们…

力扣hot100:101. 对称二叉树(双指针以不同方式递归)

LeetCode&#xff1a;101. 对称二叉树 看了第一个样例&#xff0c;很容易直接层序遍历看每一层的前后是否相同。但接下来这个样例告诉你&#xff0c;不能这样做。 层序遍历 仔细思考会发现&#xff0c;层序遍历不能看本结点&#xff0c;但是可以看儿子结点是否对称&#xf…

RK3568平台(时间篇)看门狗

一.看门狗原理 在产品化的嵌入式系统中&#xff0c;为了使系统在异常情况下能自动复位&#xff0c;一般都需要引入看门狗。 看门狗其实就是一个可以在一定时间内被复位的计数器。当看门狗启动后&#xff0c;计数器开始自动计数&#xff0c;经过一定时间&#xff0c;如果没有被…

笔记-mathtype公式在PDF或打印出来显示不全

原文中的公式&#xff1a; 纸质版打印出来的公式有缺失 问题描述&#xff1a;mathtype公式编辑器所编辑的公式转成PDF或者打印出来有缺失 以下是解决方法的具体描述。 目录 一、准备工作二、操作步骤 一、准备工作 1、工具&#xff1a;mathtype、微软word 二、操作步骤 …

概念解析 | 互补学习系统

注1:本文系"概念解析"系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:互补学习系统(Complementary Learning Systems) 概念解析:互补学习系统 Paper Summary - “Complementary Learning Systems Theory Updated” | Rylan Schaeffer…

Linux下Palabos源码编译安装及使用

目录 软件介绍 基本依赖 其它可选依赖 一、源码下载 二、解压缩&#xff08;通过方式1下载源码.zip格式&#xff09; 三、编译安装 3.1 自带算例 ​编辑3.2 自行开发算例 四、简单使用 4.1 串行运行 4.2 并行运行 4.3 查看结果 软件介绍 Palabos是一款基于LBM&…

前端面试和一些建议

最近公司在招前端&#xff0c;我有跟着一起参与面试。我们主要负责面试的人&#xff0c;不会问那些什么闭包&#xff0c;原型链&#xff0c;他觉得那些东西在我们日常开发中用不到&#xff0c;问的基本都是一些工作中的问题。这些问题不是每次都问&#xff0c;但也就问这些了。…

[论文阅读] 测试时间自适应TTA

最初接触 CVPR2024 TEA: Test-time Energy Adaptation [B站]&#xff08;1:35:00-1:53:00&#xff09;https://www.bilibili.com/video/BV1wx4y1v7Jb/?spm_id_from333.788&vd_source145b0308ef7fee4449f12e1adb7b9de2 实现&#xff1a; 读取预训练好的模型参数设计需要更…

C语言写一个终端进度条

C语言写一个终端进度条 这个功能挺简单的&#xff0c;主要有以下两点&#xff1a; 如何获取终端宽度如何让字符在原地闪烁 如何获取终端宽度 这里用到了设备控制接口函数ioctl()&#xff0c;下面简单的介绍一下这个函数的用法&#xff1a; ioctl是一个在Unix和类Unix系统中…

怎样通过Java语言实现远程控制8路控制器/断路器

怎样通过Java语言实现远程控制8路控制器/断路器呢&#xff1f; 本文描述了使用Java语言调用HTTP接口&#xff0c;实现控制8路控制器/断路器&#xff0c;支持8路输出&#xff0c;均可独立控制&#xff0c;可接入各种电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0…

【数据库主从架构】

【数据库主从架构】 1. 什么是数据库的主从架构1.1 主从复制1.1.1 MySQL的主从主从复制技术三级目录 1. 什么是数据库的主从架构 随着公司业务线的增多&#xff0c;各种数据都在迅速增加&#xff0c;并且数据的读取流量也大大增加&#xff0c;就面临着数据安全问题&#xff0c;…

手把手教你实现通讯录

整体构思 我们现在要实现一个通讯录 它应该有以下的功能 通讯录可以用来存储1000个人的信息&#xff0c;每个人的信息包括&#xff1a;姓名、性别、年龄、电话、住址 提供方法&#xff1a; 1.添加联系人信息 2.删除指定联系人信息 3.查找指定联系人信息 4.修改指定联系人信…

如何删除BigKey2

例2&#xff1a;假如有hash类型的key&#xff0c;其中有100万对field和value&#xff0c;field是自增id&#xff0c;这个key存在什么问题&#xff1f;如何优化&#xff1f; keyfieldvaluesomeKeyid:0value0..........id:999999value999999 存在的问题&#xff1a; hash的ent…

BJFUOJ-C++程序设计-实验2-类与对象

A 评分程序 答案&#xff1a; #include<iostream> #include<cstring>using namespace std;class Score{ private:string name;//记录学生姓名double s[4];//存储4次成绩&#xff0c;s[0]和s[1]存储2次随堂考试&#xff0c;s[2]存储期中考试&#xff0c;s[3]存储期…

机器学习:深入解析SVM的核心概念【二、对偶问题】

对偶问题 **问题一&#xff1a;什么叫做凸二次优化问题&#xff1f;而且为什么符合凸二次优化问题&#xff1f;**为什么约束条件也是凸的半空间&#xff08;Half-Space&#xff09;凸集&#xff08;Convex Set&#xff09;半空间是凸集的例子SVM 约束定义的半空间总结 **问题二…

使用Colab的高RAM模式

使用Colab的高RAM模式 colab需要升级为pro或者pro会员 1. 购买pro 图片来源&#xff1a;https://blog.csdn.net/javastart/article/details/138094086 2. 打开高RAM模式 要在Colab上使用高RAM模式来运行模型计算&#xff0c;您需要按照以下步骤操作&#xff1a; 打开您的…