SCP的使用

背景介绍

最近项目是集群化部署(由 node1,node2,node3 三台 CentOS 7.4 的虚拟机构成)。

但是,涉及到跨机器同步文件的问题,想通过写shell文件实现,用 crontab 设置定时任务,定时执行改脚本。

由于每次都需要输入密码,导致定时任务没法正常工作,因此,需要三台机器之间可以免密码互相访问。


建立SSH的信任关系

以实现 node1 免密码给 node2 scp传输文件为例说明,需要如下几个步骤:

1、生成 node1 的秘钥(私钥和公钥)

1)进入 node1 的 /root/.ssh 目录

cd /root/.ssh/

2)执行如下命令,生成公钥和私钥(此时,一路回车即可)

ssh-keygen -t rsa

在这里插入图片描述
其中,id_rsa 是私钥,id_rsa.pub 是公钥。

2、将 node1 的 id_rsa.pub中的内容追加到 node2 的authorized_keys 认证文件中

1)将 node1 的公钥(id_rsa.pub)信息,输出到临时认证文件 authorized_keys_node1 中

cat id_rsa.pub >authorized_keys_node1

在这里插入图片描述
2)将 authorized_keys_node1 文件 scp 到 /root/.ssh/ 目录下

scp authorized_keys_node1 root@node2:/root/.ssh/

在这里插入图片描述
3)登录到node2节点,进入 /root/.ssh目录

cd /root/.ssh/

4)将 node1 的公钥信息,追加到 node2 的认证文件(authorized_keys)中

cat authorized_keys_node1 >>authorized_keys

至此,node1 到 node2 的信任关系建立好了,node1 scp文件到 node2,就不在需要输入密码验证了。

其他机器之间的信任关系,如有需要,可以依此方法进行配置。


【额外说明】
1、上面用到了 Shell 的 > 和 >>,因为使用场景不同。

如有不清楚二者异同点的同学,可以参考博文:https://blog.csdn.net/qq_43248623/article/details/107850758

2、文中提到的 id_rsa 和 id_rsa.pub 中的 rsa,是指的 RSA加密算法。

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。


详细解答部分:

预备知识
在介绍SCP协议之前,我们先得了解一下SSH协议,和计算机中的加密方式,因为SCP协议的登录过程基于SSH协议。

对称加密
对称加密,即在数据传输过程中对数据进行加密和解密的算法使用同一个密钥,这种加密算法有什么弊端呢?

当客户端需要与服务器端进行数据传输时,不管是由客户端还是由服务端产生的密钥,都得将这个密钥传给对方才能实现加解密,而在传输的过程中就可能造成密钥的泄漏。

那么有些人就要说了,那我不用网络传输秘钥,我可以使用口头传输或者u盘拷贝的方法。

是的,这样就可以保证安全,但是在大多数互联网应用中,通信双方是陌生设备,无法做到上述的方式。

非对称加密
针对对称加密带来的风险,非对称加密则解决了这个问题。

将加解密使用的密钥分为公钥和私钥,公钥可以公开,而私钥则由密钥生成者保存,客户端使用公钥进行加密,而服务端用私钥进行解密,且目前来说还没有出现能从公钥推算出私钥的的破解机制。

所以相对于对称加密而言,这种加密方式更加安全,但是这种加密方式的缺点是会占用更多的计算机资源,而且这种资源的耗费量是巨大的。

常见的加密方式
对称加密:
DES(Data Encryption Standard):加密速度较快,适合加密大量数据的场合。

3DES:基于DES的加密算法,顾名思义,这是对一块数据用三个不同的密钥进行三次加密,显而易见强度更高,更安全。

RC2和RC4:用变长密钥对大量数据进行加密,速度比DES更快

IDEA:(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;

AES:高级加密标准,是下一代的加密算法标准,速度快,安全级别高,这个加密算法被广泛应用。

非对称加密:
RSA:是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,目前使用最广的加密算法

Diff ieˉHellman:每次交换数据的时候都使用一组新的密钥,有效地防止了第三方获得私钥后解密所有信息,但是同时对中间人攻击的防护比较薄弱。

非对称加密算法是一种密钥的保密方法。
       非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方;甲方再用自己私钥对加密后的信息进行解密。甲方想要回复乙方时正好相反,使用乙方的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密。
       另一方面,甲方可以使用自己的私钥对机密信息进行签名后再发送给乙方;乙方再用甲方的公钥对甲方发送回来的数据进行验签。
       甲方只能用其私钥解密由其公钥加密后的任何信息。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。
非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。


SSH协议
SSH是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境,最常见的运用是远程登录。SSH的交互流程是这样的:

  1. 客户端发送请求:这个请求其实就是ssh登录请求,即发起者拥有服务器上的某个用户的账号密码,以远程登录的方式来操作服务器。

  2. 服务器将公钥发送给客户端,这个公钥是给客户端进行数据加密用的

  3. 客户端收到服务器公钥,确定是否继续连接?为什么会有这么一个流程呢,既然我指定了就是要连接服务器,为什么还要让我确认一次,这会不会是多此一举呢?其实不然,这是为了防范中间人攻击。

  4. 客户端用公钥对密码进行加密,再发送给服务器

  5. 服务器用私钥对密码进行解密,返回登录结果

中间人攻击
刚刚提到中间人攻击,我们就来看看什么是中间人攻击?

我们大可以想一想,在一个不安全的网络中,如果我发送的请求被第三方截获,而第三方把他的公钥发给我,而我用他的公钥对密码进行加密,然后再发送给他,他就获得了完整的账号密码,这时候他就可以拿着从我这儿窃取来的信息登录服务器。

那么,在一个不安全的网络中,我们该怎样防范这种攻击方式呢?一般有两种方法:

  1. 服务器将公钥公布在官方或者以其他方式公开,让用户可以查到进行对比,如果不匹配,就在第三步的时候取消登录即可。

  2. CA证书,由一个权威机构CA对公钥进行认证,CA机构的数字签名使得攻击者不能伪造和篡改证书。CA机构会为申请者发放一个公钥,CA将该公钥和申请者的身份信息绑定在一起,并为之签字。

如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。


SCP的传输
说回到SCP的传输,SCP的传输第一步就是进行SSH的登录动作,然后再基于SSH协议进行文件的传输,整个传输过程是加密的。

在上面提到的ssh登录流程中,是最基本的登录流程,特点在登录时服务器要求客户端提供账号密码进行验证,其实这样是非常麻烦的,在每次登录或者传输文件时,都要输入账号密码,这对于以偷懒为终极目标的程序员来说这是不能忍受的。

SCP的免密传输
我们可以想一想,为什么在每次登录的时候都需要用户输入密码?

所有人都知道这是为了验证登录者的是否有操作权限,那换一个思路想一下,有没有另外一种方法也能验证登录者有这个登录权限呢?

当然是有的,这种验证方式建立在非对称加密协议上,当客户端C想要访问服务器S时,在客户端生成一对密钥(通常使用rsa协议),将客户端C生成的公钥放置在服务器S上,这样在连接时只需要验证服务器S上是否存在客户端C的公钥就可以完成验证操作。(详细流程见下文)


实现SCP免密传输的操作
如果你在服务器拥有一个账号,名为downey

在某一时刻你需要用一台客户机A登录到服务器上进行操作

在客户机A的家目录下的.ssh目录下生成一对秘钥,linux下的指令为:

ssh-keygen -t rsa -P “”
(ssh-keygen为秘钥生成应用程序,-t rsa 表示加密类型为rsa)

执行上述命令后,系统会提示选择生成秘钥放置的目录和密码,一般为默认选择,一路回车。(但是如果你要追求更高的安全性,你可以选择添加上私钥密码),然后在/home/downey/.ssh目录下就会生成两个文件:id_rsa和id_rsa.pub,其中id_rsa为私钥,而id_rsa.pub为公钥。

在服务器端的/home/downey/.ssh/目录下新建文件authorized_keys(如果有则不用创建),将客户端A上刚刚生成的id_rsa.pub文件中的内容复制到服务器端 /home/downey/.ssh/authorized_keys文件中(如果里面有内容则另起一行)

这样就可以直接用scp指令(或者ssh登录)进行文件传输而不用进行账号密码验证了,相当于客户机(操作机器)与服务器建立了安全连接(原理见下文),如果换一台机器登录,依旧需要验证(因为服务器端的公钥只与这台机器上私钥相匹配)。
注意
在这些文件操作的时候,特别需要注意的就是文件的权限问题,很多朋友就是把文件从其他地方复制过来,然后修改文件确保文件内容与目标一致就可以,但是发现这样的操作并没有达到免密传输的效果,很可能就是文件权限出了问题

同时,在某些服务器平台上,可能会提供网页端的接口来存放客户端的pub_key,就像github添加公钥的操作方式,但是原理都是将客户端公钥添加到服务器中


免密传输的登录流程

实现SCP传输的第一步是通信双方进行安全连接(登录),上面提到的SSH登录流程为SSH首次登录的大概讲解,我们不妨来详细探究在免密传输时的登录流程:

客户端向服务端发送连接请求,询问服务器是否支持pubkey的方式进行登录

服务端收到客户端的请求,表示接收pubkey的方式进行登录。

接收到服务端的回复,客户端决定使用pubkey的方式进行登录,客户端将一段数据用私钥进行加密,生成签名,并且将自己的公钥发送给服务器。

服务端收到客户端发过来的数据,首先将客户端的公钥取出来,在/home/$USER/.ssh/authorized_keys/中查找是否存在客户端的公钥,如果有,进行对比。
仅仅对比是否存在客户端的公钥当然是不够安全的,服务器接着使用客户端提供的公钥对客户端发过来的签名(经私钥加密)进行解密,如果解密后的数据内容正确,表示整个验证流程完成。

服务端返回登录结果。


SSH登录流程疑难解答
客户端发送给服务器的签名数据
在上述免密传输的登录部分的第三点我有提到,客户端将一段数据用私钥加密生成签名,然后服务器再对这段数据进行解密,那么服务器怎么知道这段数据是否正确呢?

首先,客户端发送给服务器的数据字段是这样的:

byte      SSH_MSG_USERAUTH_REQUEST
string    user name
string    service name
string    "publickey"
boolean   TRUE
string    public key algorithm name
string    public key to be used for authentication  
string    signature     //数据签名部分

而客户端使用私钥进行加密的数据字段是这样的:

string    session identifier
byte      SSH_MSG_USERAUTH_REQUEST
string    user name
string    service name
string    "publickey"
boolean   TRUE
string    public key algorithm name
string    public key to be used for authentication  

对比发现,事实上客户端同时发了一份数据和数据的签名给服务端,服务端就可以做对比了。


为什么公钥可以对私钥加密的数据解密
很多朋友看完上述免密传输登录流程之后,表示非常疑惑:

为什么公钥可以对私钥加密的数据进行解密?
公钥本来就是公开的,那岂不是私钥加密的数据根本没有安全性可言?
首先回答第一个问题:为什么公钥可以对私钥的加密数据进行解密。答案是:这是SSH协议的规定(好像是废话)。

好吧,正经地回答第二个问题,公钥是公开的,所有人都可以获得,而私钥只有拥有者才有,那由这对密钥加密的数据是否就没有安全性可言呢?

答案当然不是,安全性高着呢。只是,一般的加密过程是公钥加密,私钥解密,这部分数据自然是安全的。

那么私钥加密的数据呢,私钥加密的数据确实没有安全性可言,因为用私钥加密数据根本就不是为了安全性,而是作为一种验证身份的手段。
因为私钥是唯一的,一旦使用公钥对私钥加密的数据解密成功,服务端S就可以完全确定这条消息是由拥有对应私钥的客户端C发出的,而不是第三方伪装者发出的。

所以,公钥加密私钥解密,是为了数据的安全性,而私钥加密公钥解密,则是为了验证数据发送者的身份。


数据传输的加密方式
一般情况下SSH使用rsa加密算法登录,SCP基于SSH协议,所以很多人自然地认为在数据传输时,使用的加密算法也是rsa。

事实上,由于非对称加密算法计算太过于耗时,对所有数据进行加密根本不现实,所以在传输数据时一般使用对称加密算法。

上面有提到,对称加密算法的弊端是密钥传输过程容易被窃取,所以通常使用非对称加密算法来传输对称加密算法的密钥,来保证安全性。

为此,我还使用wareshark工具试图梳理整个数据传输流程,花了一天的时间得出一个结论:针对整个SCP实现的加密算法这一块,以博主的水平,暂时惹不起…(不过也只是暂时!!)

不过收获还是有的:SCP数据传输流程结合了多种加密算法,同时还根据不同级别的安全要求结合不同的加密算法。

一般来说,综合对称和非对称加密算法的特性,非对称加密一般用于登录验证、密钥传输等数据量小、安全性要求较高的的部分。

而对称算法用来传输大量数据。


网上的错误描述
事实上,网络上对于SSH的登录过程描述有不少错误之处,最经典的一个错误观点是服务器发送一个通过公钥加密的字符串给客户端,客户端私钥进行解密,然后发给服务端。

服务端将发出的字符串与收到的字符串进行对于,完成验证过程。

这种做法看起来是非常合理的,但事实上SSH并不采用这种做法,具体原因引用官方文档中的一句话:

the signing operation involves some expensive computation.
To avoid unnecessary processing and user interaction。
这句话意思很简单,加密的计算操作是非常耗时的,我们应该避免不必要的交互以节省资源。

为什么我那么自信确定它们的描述有误呢?并不是飘柔给我的自信,而是官方文档

(多嘴一句,找资源一定要先找官方文档的)


github的免密传输
用过github的盆友可能对免密传输有种熟悉的感觉,没错!在github的配置中,如果需要进行免密传输,流程是:

在客户机生成一对秘钥,同样是id_rsa,id_rsa.pub

将id_rsa.pub里的内容添加到github的settings的SSH and GPG keys选项页面中

同样的,相当于github服务端与机器已经建立用户识别机制,不需要再用账号密码来识别。


好了,关于SCP传输的讨论就到此为止啦,如果朋友们对于这个有什么疑问或者发现有文章中有什么错误,欢迎留言

原创博客,转载请注明出处!

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

相关文章

  1. 小鑫的JAVA之路(1):JAVA概述

    计算机语言 引言 计算机分为很多种语言,譬如我们熟知的python,java,PHP,C语言,C++等等,那么计算机语言到底是做什么的呢? 分类 计算机语言是指人与机器进行交互所使用的语言,为了能让机器能够读懂或者说看懂我们所表达的意思,就需要一套能让机器能够识别的编码方式,字…...

    2024/4/15 20:26:40
  2. MyEclipse 16(汉化版)安装教程

    注意安装路径不能有中文,安装包路径也不要有中文。1.选中【MyEclipse2016】压缩包,鼠标右击选择【解压到MyEclipse2016】。2.双击打开【MyEclipse2016】文件夹。3.选中【jdk-8u144-windows-x64】鼠标右击选择【以管理员身份运行】。4.点击【下一步】。5.点击【下一步】。6.点…...

    2024/5/6 18:52:57
  3. 英读廊——为什么说密码中加入特殊字符会更安全?

    * 用英语自身来理解和学习英语是最好的方式,《英读廊》是《满庭说英语》中的拓展阅读系列,这一系列的文章力求帮助大家在英语阅读能力上有所提升,并树立英语思维; * 推荐的阅读的方法是:先原文,适当看解析阅读,还有疑惑再看双语对照。 * 解析中英语单词的音标使用Dictco…...

    2024/4/15 20:26:38
  4. 渗透测试之SQL注入实战练习---Mysql+php注入练习环境

    渗透测试之SQL注入实战练习—Mysql+php注入练习环境 渗透测试之SQL注入实战练习 靶机经典案例:Mysql+php注入练习环境(ACTcms,news.php?cid=2&listid=5&newsid=25,可练习outfile,admin/admin,后台上传php4) 方法一:(手工注入) 总共发现4个注入点 第一个listid 第二个…...

    2024/4/15 20:26:37
  5. Linux网络编程4-高并发服务器

    一. 高并发服务器高并发服务器简单说就是:服务器可以同时容许多个客户端同时并发访问常用的有多进程并发服务器和多线程并发服务器。 二. 多进程并发服务器 父进程循环accept,当父进程接收到连接请求之后,立即fork出一个新的子进程去处理通信,而父进程继续循环等待接收acce…...

    2024/5/7 10:10:00
  6. Linux-常用基础命令-不全但绝对基础+常用!

    目录1.目录相关指令2.文件相关指令3.打包/解包指令3.1压缩/解压缩3.2打包/解包4.匹配查找指令5.其他指令 1.目录相关指令 ls --(默认)浏览当前目录下的文件信息 常用选项-a --浏览目录下的所有文件,包括隐藏文件(linux下以.(点)开头的文件为隐藏文件,默认不显示) -l --查看…...

    2024/4/24 23:43:30
  7. LESS笔记

    LESS可以在客户端运行,也可以在服务端运行。 在客户端使用的方式 一定要先引入.less样式 <link rel=”stylesheet/less” type=”text/css” href=”.less”> 之后引入less.js文件 <script src=”path/less.js” type=”text/javascript”></script> 监视模…...

    2024/4/15 20:26:34
  8. [JVM学习之路]十四、垃圾回收相关概念及JVM的引用(面试考点)

    垃圾回收相关概念 一、对System.gc()的理解在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(无法保…...

    2024/5/7 9:15:47
  9. 智能电销机器人安装过程解析,智能电话机器人系统安装使用

    众所周知,电销机器人已经不再是大家陌生的人工智能手段,而是帮助企业降本增效的利器,2017年被称为人工智能元年,人工智能突飞猛进的发展,将一大批智能语音厂商推上了风口浪尖。 智能电销机器人在近年来的发展呈现井喷式增长,研发厂商的增长,带来了大批代理的出现,鱼龙混…...

    2024/5/7 8:46:03
  10. UE4材质01纹理和材质

    文章目录纹理与材质纹理尺寸和mipmap多级渐进式纹理纹理文件格式和纹理压缩纹理通道和sRGB前向渲染和延迟渲染遮蔽剔除和半透明计算遮蔽关系半透明材质 纹理与材质 纹理尺寸和mipmap多级渐进式纹理 输出指定尺寸的图片:ps-图像–图像大小...

    2024/4/23 16:45:54
  11. 05-js灯泡效果

    4.灯泡效果 简述:点击哪个圆形图案,对应的样式会发生改变 html部分 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&…...

    2024/4/23 2:43:55
  12. JAVA基础算法-运算符

    运算符 算术运算符/* 算数运算符 +、-、*、/、%、++、-- ++、– 使用方式:单独使用 参与运算 当++、–出现在操作数的后面时,先传值再自加1 /自减1 当++、–出现在操作数前面时,先自加1/自减1再 传值 */class SuanShu{public static void main(String[] args) {//操作…...

    2024/4/22 22:09:09
  13. java 中作为根节点

    GC Roots根对象摘自《深入理解Java虚拟机》在Java语言中,可作为GC Root的对象包括以下几种:虚拟机栈(栈桢中本地变量表)中引用的对象方法区中类静属性引用的对象方法区中常量引用的对象本地方法栈中JNI(即一般说的Navite方法)中引用的对象...

    2024/4/15 20:26:29
  14. 计算机编码 -- Unicode && ASCII

    计算机编码 Persus & Xie字符集 计算机是以二进制的形式来存储数据的,它只认识0和1两个数字,我们在屏幕上看到的文字,在存储之前都被转换成了二进制,即0和1序列,在显示时也要根据二进制找到对应的字符。 在计算机中,每一个二进制位(bit)有0和1两种状态;因此对于8个二…...

    2024/5/6 22:24:14
  15. 【超详细Django网站开发过程11】便利店管理系统之——登录校验(session与token)

    大家会发现,如果没有登录校验,任何用户其实都可以通过直接输入主页地址,查看管理系统信息的。所以,我们登录校验是一个必不可少的环节。 1、打开customer.py,找到dispatcher函数,我们必须在dispatcher函数中的增删查改代码执行前,加一个校验过程,如下: def dispatcher…...

    2024/4/28 14:26:36
  16. 岛屿DFS题。

    这题颇有感触。 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 示例 1: 输入: [ [‘1’,‘1’,‘1’,‘1…...

    2024/5/7 2:38:06
  17. JavaSE基础:泛型详解、泛型的通配符,类,方法,接口中的分别使用方法!

    泛型概念 泛型:是一种未知的数据类型,当我们不知道使用什么数据类型时,可以使用泛型。 泛型也可以看作是一个变量,用来接收数据类型E e :元素 T t :类型使用泛型的好处与弊端 创建集合对象,使用泛型 好处:1.避免了类型转化的麻烦,存储的是什么类型,取出的就是什么…...

    2024/4/28 8:50:17
  18. Mybatis复习笔记:3

    关于映射配置文件的一些注意点 parameterType parameterType为输入参数,即负责配置的时候传入的参数类型。 parameterType有基本数据类型和复杂的数据类型配置。 一.基本数据类型 基本数据类型:int,String,long,Date等; 这是在我之前的博客中讲的最多的了 <select id=…...

    2024/5/7 7:28:31
  19. Android多线程开发详解

    一、volatile 1、内存模型 Java内存模型规定所有的变量都是存在主存当中,每个线程都有自己的工作内存。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存。变量的值何时从线程的工作内存写回主存,无法确定。 …...

    2024/4/27 9:40:22
  20. 判断链表是否有环

    判断链表是否有环/* 141* 题目描述:判断链表中是否有环* 解题思路:慢指针一次走一步、快指针一次走两步* 当快指针指向空时链表无环,当快指针指向慢指针时链表有环* */ public class LinkedListCycle {public static void main(String[] args) {ListNode head = new …...

    2024/4/15 20:26:26

最新文章

  1. 获取Android Native堆栈

    文章目录 工具和方法获取当前线程的堆栈信息获取任意线程的堆栈信息GCC生成符号的规律总结 在Android系统中&#xff0c;我们有时需要获取Native层的堆栈信息&#xff0c;例如在进行性能分析、问题定位和调试等场景。本文将介绍如何在Android Native层获取堆栈信息&#xff0c;…...

    2024/5/7 10:22:29
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. [Spring Cloud] gateway全局异常捕捉统一返回值

    文章目录 处理转发失败的情况全局参数同一返回格式操作消息对象AjaxResult返回值状态描述对象AjaxStatus返回值枚举接口层StatusCode 全局异常处理器自定义通用异常定一个自定义异常覆盖默认的异常处理自定义异常处理工具 在上一篇章时我们有了一个简单的gateway网关 [Spring C…...

    2024/5/3 22:05:18
  4. 【嵌入式开发 Linux 常用命令系列 4.3 -- git add 不 add untracked file】

    请阅读【嵌入式开发学习必备专栏 】 文章目录 git add 不add untracked file git add 不add untracked file 如果你想要Git在执行git add .时不添加未跟踪的文件&#xff08;untracked files&#xff09;&#xff0c;你可以使用以下命令&#xff1a; git add -u这个命令只会加…...

    2024/5/5 8:53:25
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/6 18:23:10
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/6 18:40:38
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/6 23:37:19
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/6 7:24:07
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/7 0:32:52
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/6 6:01:13
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/6 7:24:06
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/7 1:54:46
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/6 20:04:22
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/7 0:32:51
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/6 7:24:04
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/6 7:24:04
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/6 19:38:16
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/6 7:24:03
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/7 0:32:49
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/6 21:25:34
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/6 7:24:02
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/7 7:26:29
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/7 0:32:47
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/6 16:50:57
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57