【如何使用SSH密钥验证提升服务器安全性及操作效率】(优雅的连接到自己的linux服务器)

文章目录

  • 一、理论基础(不喜欢这部分的可直接看具体操作)
    • 1.为什么要看本文(为了zhuangbility)
    • 2.为什么要用密钥验证(更安全不易被攻破)
    • 3.密码验证与密钥验证的区别
  • 二、具体操作
    • 1.生成密钥对
      • 1.1抉择:客户端生成?OR服务器生成?
      • 1.2执行生成密钥对:
      • 1.3再啰嗦一下:
      • 1.4生成的密钥对长啥样:
    • 2.在服务器端进行配置
      • 2.1服务端的`authorized_key`(授权列表)文件配置
        • 2.1.1 本地PC生成密钥对的小伙伴,请看这部分:
          • 方法一:使用 SSH 拷贝公钥到远程服务器(适用于Mac、Linux电脑)
          • 方法二:手动上传公钥到服务器(适用于Windows、Mac及linux电脑)
        • 2.1.2 服务器生成密钥对的小伙伴,请看这部分:
      • 2.2 服务端允许通过密钥方式登录的配置确认
    • 3.使用SSH命令指定私钥登录服务器
      • 3.1 用SSH指定私钥的方式登录到服务器
      • 3.2 用SSH默认私钥的方式登录到服务器
      • 3.3 用更优雅的命令方式进行SSH登录到服务器
      • 3.4 极致的优雅!借助别名(alias)让命令更短!
        • 3.4.1 在 macOS 和 Linux 上:
        • 3.4.2在 Windows 上:
      • 3.5 注意事项:
  • 三、总结

一、理论基础(不喜欢这部分的可直接看具体操作)

1.为什么要看本文(为了zhuangbility)

你有没有看过别人不用输入密码,只需要简单的一行命令就可以连接到服务器,你是不是也很好奇,不输入密码怎么能通过认证的?本文为你揭秘整个细节操作,无论你是windows电脑还是mac电脑,甚至是linux操作系统,看完本文,你也可以同样输入一行命令就能连接到自己的服务器了!来一波强势装逼!

2.为什么要用密钥验证(更安全不易被攻破)

在网络连接中,安全性是至关重要的一环。传统的密码验证方式虽然简单易用,但存在着被暴力破解或者被盗用的风险。为了提高服务器的安全性,密钥验证成为了一种更为可靠的选择。

3.密码验证与密钥验证的区别

在传统的密码验证中,用户需要输入用户名和密码才能登录到服务器。这种方式存在着密码被盗用的风险,尤其是在使用弱密码或者在不安全的网络环境下。而密钥验证则是一种基于非对称加密算法的验证方式,用户需要生成一对密钥,其中一个是私钥(Private Key),另一个是公钥(Public Key)。私钥保存在客户端,而公钥则被上传到服务器端。当用户尝试连接到服务器时,服务器会要求客户端提供对应的私钥,如果私钥匹配服务器端存储的公钥,则验证通过,用户可以登录到服务器。

相比密码验证,密钥验证具有以下优势:

  • 更高的安全性:私钥存储在客户端,不会在网络上传输,减少了密码被盗用的风险。
  • 免去密码记忆的烦恼:用户无需记忆复杂的密码,只需保存好私钥即可。

二、具体操作

那么铺垫了这么多,到底如何才能使用密钥进行验证登录呢? 不要着急,总共就三板斧:

  • 1.生成密钥对(包括公钥和私钥)
  • 2.在服务器端进行配置,允许密钥认证方式并且配置好相关的授权列表。
  • 3.确保服务器的公钥和客户端使用的私钥是匹配的,使用SSH命令进行登录即可大功告成!

1.生成密钥对

1.1抉择:客户端生成?OR服务器生成?

生成密钥对的时候,可以在客户端进行生成,也可以在服务器上进行生成,这个具体取决于哪种方式对你更加方便。

  • 如果你有一台个人PC,但是你有多个linux服务器,你希望生成一个密钥对之后,就可以访问所有的服务器,那么你就在个人PC上进行密钥对的生成即可。
  • 如果你有一台linux服务器,但是需要多个客户终端去连这个服务器,那么你就在这台linux服务器上生成密钥对即可。
  • 如果不属于以上两种,那你就随意选一种就可以。

1.2执行生成密钥对:

在命令窗口执行以下命令即可:

ssh-keygen

执行完以上代码之后,会出现提示,没有特殊要求的话,直接一路回车,然后就生成结束了。

如果有特殊要求的话,就请仔细查阅1.3再啰嗦一下这个部分。

1.3再啰嗦一下:

SSH(Secure Shell)是一种网络协议,用于通过加密的通信管道在网络上安全地进行远程登录和执行命令。SSH协议通过加密技术,防止了数据在传输过程中被窃取或篡改的风险。

ssh-keygen 命令是SSH工具包中的一个命令行工具,用于生成SSH密钥对,即公钥和私钥。SSH密钥对由一对相互关联的密钥组成:

  1. 公钥(public key):公钥用于加密数据或验证签名,并且可以安全地与其他人分享,例如将其存储在远程服务器上以进行身份验证。
  2. 私钥(private key):私钥通常保存在生成密钥对的计算机上,并且必须严格保密。私钥用于解密数据或生成数字签名,用于身份验证。

ssh-keygen 命令有多个可选选项,其中一些常用选项包括:

  1. -t:指定要生成的密钥类型,如 rsadsaecdsaed25519 等。
  2. -b:指定生成密钥的位数,通常用于RSA密钥,如 -b 2048
  3. -C:在生成密钥时添加注释,可用于识别密钥的用途或所有者。
  4. -f:指定生成密钥的文件路径和名称。
  5. -N:设置用于保护私钥的密码,可以为空。
  6. -q:静默模式,减少输出信息。
  7. -y:从私钥中提取公钥并打印到标准输出。
  8. -h:显示命令的使用帮助信息。

这些选项可以根据需要组合使用,以生成符合特定需求的密钥对。
当你使用 ssh-keygen 命令时,它会向你提供一些选项,例如密钥类型(RSA、DSA、ECDSA、ED25519等)、密钥位数、密钥保存路径等。一般来说,你可以按照默认选项生成密钥对,但也可以根据需要自定义选项。

生成密钥对后,你可以将公钥部署到需要进行SSH连接的服务器上,以便你可以使用对应的私钥进行安全的远程登录或执行命令,而无需输入密码。这种基于密钥对的身份验证方式通常比基于密码的身份验证更安全。

1.4生成的密钥对长啥样:

生成的密钥对如果你没有特意的选择路径的话,一般都在默认路径下。

  • windows电脑对应的路径为:C:\Users\你的用户名\.ssh
  • MAC/linux对应的路径为:~/.ssh
    生成的密钥对有两个文件:id_rsa(私钥文件)和 id_rsa.pub(公钥文件)
    在这里插入图片描述
    至此,第一步已经成功完成了,恭喜你!接着来看第二步吧。

2.在服务器端进行配置

此时需要做两件事情:

  • 1.确保公钥内容在~/.ssh/authorized_key文件(如果没有这个文件,请手动创建)中。(无论是在客户端生成的密钥对还是服务端生成的密钥对)
  • 2.确保服务器端打开了允许通过秘钥验证的方式登录。

2.1服务端的authorized_key(授权列表)文件配置

2.1.1 本地PC生成密钥对的小伙伴,请看这部分:

将本地生成的公钥上传到服务器中可以通过多种方式实现,以下是其中两种常用的方法:

方法一:使用 SSH 拷贝公钥到远程服务器(适用于Mac、Linux电脑)
  1. 使用以下命令将本地公钥复制到远程服务器:

    ssh-copy-id username@remote_host
    

    其中 username 是你在远程服务器上的用户名,remote_host 是远程服务器的地址或主机名。系统会要求你输入密码,然后将公钥自动添加到远程服务器的 ~/.ssh/authorized_keys 文件中。

  2. 如果你的服务器端口不是默认的 22 端口,可以使用 -p 参数指定端口号:

    ssh-copy-id -p port_number username@remote_host
    

    其中 port_number 是你的服务器 SSH 服务的端口号。

方法二:手动上传公钥到服务器(适用于Windows、Mac及linux电脑)
  1. 首先使用 scp 命令将本地公钥复制到远程服务器,例如:

    scp ~/.ssh/id_rsa.pub username@remote_host:~/temp_key.pub
    

    这将把本地公钥文件 id_rsa.pub 复制到远程服务器的 ~/temp_key.pub 文件中。

  2. 登录到远程服务器,并将公钥内容追加到 ~/.ssh/authorized_keys 文件中:

    ssh username@remote_host
    cat ~/temp_key.pub >> ~/.ssh/authorized_keys
    rm ~/temp_key.pub  # 可选:删除临时公钥文件
    

    这样就将本地生成的公钥内容手动添加到了远程服务器的授权列表中。

2.1.2 服务器生成密钥对的小伙伴,请看这部分:

1.首先,在服务器的授权列表,将生成的公钥内容放进去。具体步骤如下:

  1. 先忍耐一下,通过以往密码的方式登录到你的服务器。
  2. 将服务端生成的公钥内容添加到 ~/.ssh/authorized_keys 文件中:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  1. 修改 authorized_keys 文件的权限:(如果权限够,这步可以省略)
chmod 600 ~/.ssh/authorized_keys

2.其次,将服务器生成的私钥文件复制到你的本地电脑,用于之后的密钥验证登录。

你可以使用以下方法将服务器上的私钥文件复制到本地:

Windows:

  1. 使用SCP命令进行复制: 使用SCP命令连接到服务器并将私钥文件下载到本地计算机上的当前目录中。
    scp命令复制的代码如下:
    scp username@server_address:~/.ssh/id_rsa .
    

username 替换为你在服务器上的用户名,server_address 替换为你的服务器地址,~/.ssh/id_rsa为默认的私钥文件存放的地址,如果你的路径不一样,请进行替换。.为本地计算机上要保存私钥文件的路径,这里为当前目录。
2. 使用 SSH 客户端: 如果你使用的 SSH 客户端支持文件传输功能,你也可以使用它来将文件从服务器复制到本地计算机。

macOS:

  1. 使用 SCP 命令: 在终端中使用 SCP 命令从服务器复制文件到本地计算机。例如:

    scp username@server_address:/path/to/private_key /local/path/to/save
    

    username 替换为你在服务器上的用户名,server_address 替换为你的服务器地址,/path/to/private_key 替换为服务器上私钥文件的路径,/local/path/to/save 替换为本地计算机上要保存私钥文件的路径。

  2. 使用 SFTP: 如果你使用的 SSH 客户端支持 SFTP 功能,你可以连接到服务器并使用 SFTP 功能将文件下载到本地计算机上。

2.2 服务端允许通过密钥方式登录的配置确认

确认服务器端已经开启了允许密钥登录方式的配置可以通过以下步骤:

  1. 登录到服务器:首先,通过用户名和密码登录到服务器。

  2. 检查SSH配置文件:使用文本编辑器(如nano或vim)打开SSH配置文件。在大多数Linux系统中,SSH配置文件位于 /etc/ssh/sshd_config

  3. 查找密钥登录配置:在配置文件中查找以下行:

    PubkeyAuthentication yes
    

    如果这一行存在,并且值为 yes,则表示已经允许使用密钥登录。如果值为no,需要手动改为yes

*注意:

PasswordAuthentication yes

这个配置项是控制是否允许使用密码登录的,值是yes代表允许密码登录,如果改为no,则无法再通过密码的方式进行登录。
切记:用密钥登录的方式没有调通之前,千万不要关闭密码登录,否则你将会把自己困住,再也进不去服务器( ̄︶ ̄),别问我怎么知道的……

  1. 重启SSH服务:如果你对配置文件进行了更改,则必须重启SSH服务才可以使更改生效。可以使用以下命令来重启SSH服务:

    sudo systemctl restart sshd
    

至此,第二步的工作也搞定了,成功就在眼前了,让我们一鼓作气完成!

3.使用SSH命令指定私钥登录服务器

3.1 用SSH指定私钥的方式登录到服务器

现在,我们本地已经有私钥文件了,直接验证一波使用密钥验证登录到服务器,看是否可以:

ssh -i /path/to/private_key username@server_ip

这个命令是用于通过SSH连接到远程服务器的命令,下面解释一下其中的各个部分:

  1. ssh:这是命令本身,表示要使用SSH协议进行连接。

  2. -i /path/to/private_key:这是SSH选项 -i,用于指定私钥文件的路径。私钥文件是用于密钥身份验证的一部分,它与公钥文件成对生成,通常存储在本地计算机上。在这个命令中,/path/to/private_key 应该被替换为你实际私钥文件的路径。这个私钥文件必须匹配在服务器上为相应用户配置的公钥。

  3. username@server_ip:这是你要连接的远程服务器的用户名和IP地址或域名。username 是你在远程服务器上的用户名,server_ip 是服务器的IP地址或域名。通过这个部分,SSH知道要连接哪个远程服务器,并且使用提供的用户名进行登录。

所以,整个命令的含义是:使用指定的私钥文件连接到远程服务器,以提供的用户名进行登录。这个命令适用于基于密钥的身份验证,私钥文件是用于验证你的身份,并且必须与服务器上对应用户的公钥匹配。

我运行的截图如下:
在这里插入图片描述
可以看到,我们已经大功告成了!已经可以成功通过密钥验证的方式链接服务器了!

什么,命令太长了,记不住?那你试试下面这种方式:

3.2 用SSH默认私钥的方式登录到服务器

ssh  username@server_ip

这种情况就是不加 -i 参数,SSH 将默认使用用户的默认私钥文件进行连接。
通常情况下,这个默认私钥文件位于用户的家目录下的 .ssh 文件夹中,文件名为 id_rsa
所以,如果你满足这个条件的话,你会发现,这样也可以直接登录服务器了!

啥,我是个骗子,这种方式不够优雅?
好好好,压箱底的东西看来非得掏出来了,给我往下看!

3.3 用更优雅的命令方式进行SSH登录到服务器

秘籍就是.ssh目录下的config文件,这就是想优雅的比较关键的一点。

.ssh 目录下的 config 文件是 SSH 客户端的配置文件,它可以包含一系列主机配置选项,以及对每个主机的自定义配置。这个文件允许你在连接到远程主机时自定义一些参数,从而简化 SSH 连接过程并提高灵活性。

以下是一些常见的用法:

  1. 指定主机别名:你可以为远程主机设置别名,这样你就不必每次都输入完整的主机名。例如:

    Host myserver
        HostName server_ip
        User username
    

    这样,你只需要使用 ssh myserver 就可以连接到 server_ip,并以 username 用户身份登录。

  2. 指定身份验证方法:你可以在 config 文件中指定要使用的身份验证方法,如使用特定的私钥文件或密码。例如:

    Host myserver
        HostName server_ip
        User username
        IdentityFile /path/to/private_key
    

    这样,你就可以在连接到 myserver 时自动使用指定的私钥文件进行身份验证。

  3. 端口转发和代理:你可以配置端口转发和代理,以便在 SSH 连接时自动设置端口转发或使用代理。例如:

    Host myserver
        HostName server_ip
        User username
        LocalForward 8080 localhost:80
        ProxyJump jumpserver
    

    这样,当连接到 myserver 时,会自动设置本地端口 8080 到远程主机 localhost80 端口的转发,并且通过 jumpserver 进行代理跳转。

通过使用 config 文件,你可以方便地管理多个主机的连接参数,并且可以自定义各种连接选项,使 SSH 连接更加灵活和高效。

怎么样,这样总可以了吧!现在命令可是缩短成了:
ssh myserver
这样已经很短了吧,已经很方便了。如果你还是要追求极致,想要更短,比如用一个字母的这种命令就可以让其运行,那也不是不行,但是这就涉及到了命令行别名的问题,如果你还有兴趣,就继续往下看!

在大多数情况下,为了保持命令的清晰性和可读性,缩短别名到单个字母可能会导致理解上的困难,并且可能与其他系统命令发生冲突。不过,如果你仍然希望缩短命令,可以尝试以下方法:

3.4 极致的优雅!借助别名(alias)让命令更短!

3.4.1 在 macOS 和 Linux 上:

你可以在用户的 ~/.bashrc~/.bash_profile 文件中添加别名定义。例如:

alias a='ssh myserver'

保存文件后,重新启动终端或者执行 source ~/.bashrcsource ~/.bash_profile 来使更改生效。

3.4.2在 Windows 上:

在 Windows 上,你可以在 PowerShell 或者命令提示符中使用 doskey 命令来创建别名。例如:

doskey a=ssh myserver

已经要记得,改完这些配置文件后,需要重新加载才可以生效!!!不然不管用!!

在这里插入图片描述

3.5 注意事项:

  • 在使用单个字母的别名时要特别小心,确保不会与其他系统命令冲突。
  • 确保别名的清晰和易懂,避免造成混淆和误解。

无论你选择哪种方法,都请谨慎操作,以确保不会产生意外的后果。

如此一来,只需要在命令行执行 a ,就可以直接通过密钥验证的方式链接到你的服务器了。

三、总结

在本文中,我们首先明确了阅读的动机——追求装逼(zhuangbility)。然后,我们深入探讨了为什么要采用密钥验证而不是传统的密码验证,指出了密钥验证的更高安全性和难以被攻破的优势,以及密码验证与密钥验证的区别。

具体操作方面,我们从生成密钥对开始,探讨了在客户端还是服务器端进行生成的抉择,然后详细介绍了如何执行生成密钥对,并简要解释了生成的密钥对的样式。接着,在服务器端进行配置方面,我们介绍了配置服务端的authorized_key文件,针对本地PC生成密钥对和服务器生成密钥对的小伙伴分别提供了配置指南。然后,我们确认了服务端允许通过密钥方式登录的配置,确保安全登录。接下来,我们详细介绍了使用SSH命令指定私钥登录服务器的几种方式,包括指定私钥的方式、默认私钥的方式以及更优雅的命令方式。最后,我们分享了一个极致优雅的技巧——借助别名(alias),让命令更加简短,提高操作效率。

通过本文的学习,读者不仅能够理解密钥验证的原理和优势,还可以掌握实际操作中生成密钥对、配置服务器端和登录服务器的方法,从而提升系统安全性,并在操作中实现更高的效率和便利。
在这里插入图片描述
至此,你已经掌握了无上绝学,可以放心的去装逼了!

大师兄诚不欺人,感谢各位大佬的观看!

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

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

相关文章

数据库|TiDB-Server API的高效应用指南

一、API介绍 1.Status 显示TiDB 连接数、版本和git_hash 信息 tidb-server_ip:status_port/status { "connections": 0, "version": "5.7.25-TiDB-v6.1.1", "git_hash": "5263a0abda61f102122735049fd0dfadc7b7f822" } 2.St…

Ollama +Docker+OpenWebUI

1 Ollama 1.1 下载Ollama https://ollama.com/download 1.2 运行llama3 $ ollama run llama3 pulling manifest pulling 00e1317cbf74... 100% ▕███████████████████████████████████████████████████████████…

SD-WAN的核心竞争力有哪些?

随着企业网络需求的飞速增长,SD-WAN作为一种新兴网络连接方式,正迅速受到企业的青睐。SD-WAN不仅仅是连接手段,更是网络优化、安全防护和综合管理的集大成技术。在这篇文章中,我们将简要探讨SD-WAN的核心竞争力,以帮助…

Flink checkpoint 源码分析

序言 最近因为工作需要在阅读flink checkpoint处理机制,学习的过程中记录下来,并分享给大家。也算是学习并记录。 目前公司使用的flink版本为1.11。因此以下的分析都是基于1.11版本来的。 在分享前可以简单对flink checkpoint机制做一个大致的了解。 …

mysql-sql-练习题-4-标记

标记 连续登录2-7天用户建表排名找规律 最大连胜次数建表只输出连胜结果输出所有连续结果 连续登录2-7天用户 建表 create table continuous_login(user_id1 integer comment 用户id,date_login date comment 登陆日期 ) comment 用户登录表;insert into continuous_login val…

这是一个简单网站,后续还会更新

1、首页效果图 代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <title>爱德照明网站首页</title> <style> /*外部样式*/ charset "utf-8"…

【计算机毕业设计】基于SSM++jsp的社区管理与服务系统【源码+lw+部署文档+讲解】

目录 摘 要 Abstract 第一章 绪论 第二章 系统关键技术 第三章 系统分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3运行可行性 3.1.4法律可行性 3.4.1注册流程 3.4.2登录流程 3.4.3活动报名流程 第四章 系统设计 4.3.1登录模块顺序图 4.3.2添加信息模块顺序图 4.4.1 数据库E-…

使用STM32CubeMX对STM32F4进行串口配置

目录 1. 配置1.1 Pin脚1.2 RCC开启外部晶振1.3 时钟1.4 串口配置 2. 代码2.1 默认生成代码2.1 开启串口中断函数2.3 接收中断2.4 接收回调函数2.5 增加Printf 的使用 1. 配置 1.1 Pin脚 1.2 RCC开启外部晶振 1.3 时钟 外部使用8MHz晶振 开启内部16MHz晶振 使用锁相环 开启最高…

动手写一个简单的Android 表格控件支持固定列

Android 动手写一个简洁版表格控件 简介 源码已放到 gitee 作为在测绘地理信息行业中穿梭的打工人&#xff0c;遇到各种数据采集需求&#xff0c;既然有数据采集需求&#xff0c;那当然少不了数据展示功能&#xff0c;最常见的如表格方式展示。 当然&#xff0c;类似表格这些…

【消息队列】MQ介绍

MQ MQ&#xff08;MessageQueue&#xff09;&#xff0c;中文是消息队列&#xff0c;就是存放消息的队列&#xff0c;也是下面提到的事件驱动架构中的Broker 同步调用的优点&#xff1a; 时效性强&#xff0c;可以立即得到结果 同步调用的问题&#xff1a; 耦合度高性能和吞吐…

汽车信息安全入门总结(2)

目录 1.引入 2.汽车信息安全技术 3.密码学基础知识 4.小结 1.引入 上篇汽车信息安全入门总结(1)-CSDN博客主要讲述了汽车信息安全应该关注的点&#xff0c;以及相关法规和标准&#xff0c;限于篇幅&#xff0c;继续聊信息安全相关技术以及需要掌握的密码学基础知识。 2.汽…

Costas-Barker序列模糊函数仿真

文章目录 前言一、Costas 序列二、Barker 码三、Costas-Barker 序列模糊函数仿真1、MATLAB 核心代码2、仿真结果①、Costas-Barker 模糊函数图②、Costas-Barker 距离模糊函数图③、Costas-Barker 速度模糊函数图 四、资源自取 前言 Costas 码是一种用于载波同步的频率调制序列…

基于SpringBoot+Vue高校竞赛管理系统的设计与实现

项目介绍&#xff1a; 高校竞赛管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、竞赛公告管理、获奖管理、老师管理、评审管理、评审分配管理、评审打分管理、赛事管理、赛事提交管理、赛事报名管理、用户管理、专家管理、管理员管理。用…

万兴PDF专家 PDFelement Pro v10.3.8 破姐版!

&#x1f9d1;‍&#x1f4bb;万兴PDF专家 PDFelement Pro v10.3.8 破姐版 (https://docs.qq.com/sheet/DRVVxTHJ3RXJFVHVr)

FreeRTOS软件定时器

说明本文章基于百问网RTOS教程文档 1.硬件定时器 什么是硬件定时器&#xff0c;由硬件电路构成的定时器。在学习STM32时我们都会学到定时器&#xff0c;这个就是硬件定时器。硬件定时器不单单可以定时&#xff0c;它还可以进行PWM输出等等。硬件定时器每隔一段固定的时间会进…

近几年视频取证、视频篡改检测技术发展现状及挑战

前言 本文主要搜集了视频取证各个子领域近几年的高影响因子/引用数的文章及其主要思想和做法&#xff0c;旨在分析目前视频篡改检测的发展现状与热点领域&#xff0c;文章中也融合了自己的一点看法和展望&#xff0c;欢迎感兴趣的同学和我多多沟通。 本文无论是文献搜集还是方…

基于Spring Boot的外卖点餐系统设计与实现

基于Spring Boot的外卖点餐系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 网站首页界面图&#xff0c;通过进入网站可以查看首页、…

并查集应用-连通块中点的数量and食物链

文章目录 连通块中点的数量思路代码javaC 代码 食物链带扩展域的并查集代码带边权的并查集数组d的真正含义以及find()函数调用过程核心代码注意事项&#xff0c;即明白 d[i] 的含义 代码C Java 连通块中点的数量 给定一个包含 n 个点&#xff08;编号为 1∼n &#xff09;的无向…

Leetcode—860. 柠檬水找零【简单】

2024每日刷题&#xff08;122&#xff09; Leetcode—860. 柠檬水找零 实现代码 class Solution { public:bool lemonadeChange(vector<int>& bills) {int count5 0;int count10 0;for(int i 0; i < bills.size(); i) {if(bills[i] 5) {count5;} else if(bi…

【自然语言处理】Word2VecTranE的实现

作业一 Word2Vec&TranE的实现 1 任务目标 1.1 案例简介 Word2Vec是词嵌入的经典模型&#xff0c;它通过词之间的上下文信息来建模词的相似度。TransE是知识表示学习领域的经典模型&#xff0c;它借鉴了Word2Vec的思路&#xff0c;用“头实体关系尾实体”这一简单的训练目…
最新文章