SSH公钥登录和RSA非对称加密
SSH登录方式
接触过Linux服务器的同学肯定用过SSH协议登录系统,通常SSH协议都有两种登录方式:密码口令登录和公钥登陆。
一、密码口令(类似于账号密码登录)
1.客户端连接服务器,服务器把公钥发给客户端
2.客户端输入登录口令,并用服务器公钥加密后提交给服务器
3.服务器用私钥解密,结果匹配,则允许登录
二、公钥登录(一般用RSA非对称加密)
1.客户端生成密钥对
2.将客户端的公钥写入服务器的密钥验证文件
3.客户端请求登录,服务器生成一段随机字符串,并使用客户端公钥加密后发送给客户端
5.客户端使用自己的私钥解密,并返回解密后的信息到服务器
6.服务器进行信息对比,如果结果匹配,则允许登录
SSH公钥登陆
生成秘钥
生成秘钥,Windows/Linux通用:
# -t:指定秘钥类型,不指定默认为RSA
# -C:注释,可以不用设置,主要用于识别秘钥,可以写邮箱、用户名等信息
# -b:秘钥长度,默认2048位,一般不用设置
ssh-keygen -t rsa -C "www.guitu18.com"
以Windows演示(Linux是一样的),这里会有三次确认输入,第一个是设置秘钥保存的路径,第二个和第三个是设置秘钥的密码。默认秘钥保存路径不用修改,如果不设置密码直接按三次Enter即可。

之后你就能在当前用户目录下的.ssh目录看到生成的公钥和私钥了

同步发表于:https://www.guitu18.com/post/2020/05/01/71.html
服务器开启公钥登陆
接着就是将我们的公钥写入服务器的密钥验证文件了,在写入前我们还要在服务器开启密钥登陆。
修改sshd配置文件:vim /etc/ssh/sshd_config

这里你需要关注的参数有三个,逐一说明:
# 公钥登录开关,默认是关闭的,将他打开,修改为 yes
PubkeyAuthentication yes
# 秘钥验证文件,默认值为 .ssh/authorized_keys 通常不用修改
AuthorizedKeysFile .ssh/authorized_keys
# 密码登录开关,默认开启(在公钥登录调试完成前你可以先开启密码登录)
PasswordAuthentication no
如果你有看过其他配置教程,你可能还会看到要你开启一个RSAAuthentication的参数:
# 这个参数在CentOS 7.4之后弃用了
RSAAuthentication yes
如果你的系统是CentOS 7.4及以后,你在 /etc/ssh/sshd_config 文件中会找不到这个参数,不用理会也不用将它加进来,SSH第二代协议已经将它废弃了。
修改完成后重启sshd服务即可:
# 也可以用这个命令:service sshd restart
systemctl restart sshd
将公钥写入服务器
现在你需要把你本地生成的公钥信息写入秘钥验证文件,也就是 .ssh/authorized_keys文件,你可以将你的公钥上传到服务的~/.ssh/目录后改名为 authorized_keys,也可以用文本编辑器将公钥打开,复制文本内容到服务器的authorized_keys文件里(配置多态客户端公钥时,换行后直接往后面追加公钥内容即可)。
vim ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp29fDtYdrHaj6l+QAs4RXvkFaoct1mYlKrQze4MQDN1d308SbVLPgY6F3D80MMpdfu9fpKZzNbpgzCWkncfzX8ClJts2AaT1smsr23ubFnq6/OOPXQJi2zIagOorSn+KjME8gHOfraGn1vNKJemdmpqDe+jmWTzlAaGecUHoh+fWwBl5lA/Cz62OJ1k/O3TwLF7sn3QPLggv3CdZ8y3Vh1k6XN9GCtUlL/TujK3iYGHE3410AOLdNb56+t6k/NJJZwpH/x77Zf6sWsZo8Ri/tFGhsCKIniu56o+m6R3/Ar40LOz6gmfJbwfQsqwNGh67/LtO00QDm6qfpEdNkz2v1 www.guitu18.com
使用公钥登陆
现在你使用你的公钥来登录服务器了,这里以Xshll举例,点击链接服务器之后,会弹出认证窗口(我关闭了密码登录所以密码选项是灰色的)。点击 [浏览] > [用户秘钥] ,在弹出的界面点击 [导入],选择你之前生成的秘钥对中的私钥(是私钥不要选错了),如果在生成秘钥的时候设置了密码在导入时也需要输入密码。


导入成功后返回认证窗口选择刚导入的秘钥登录,如果生成秘钥的时候设置了密码,在用秘钥登录时也需要输入密码,口令正确即可登录成功了。
细心的朋友应该看到在证书导入的界面有一个生成按钮,是的,Xhell也可以帮我们生成证书,而且是图形化界面操作(Linux非图形模式只能用命令行生成),非常友好,其实大部分SSH连接工具都带了生成秘钥的功能,感兴趣的可以自己尝试一下。
RSA加密
说RSA加密要先说两个概念:对称加密和非对称加密
对称加密:
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率。对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。
非对称加密:
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。目前最常用的非对称加密算法是RSA算法。虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。
非对称加密在很多地方都有应用,如HTTPS。HTTPS的非对称加密还涉及到一个CA证书颁发机构,先通过CA根证书以非对称加密的方式进行认证,然后再从服务器拿到公钥,之后再用公钥加密传输对称加密要用到的秘钥,这样就保证了对称加密证书的安全性,接着就可以愉快的用对称加密来进行通信了。
非对称加密在这里有两个作用:认证和安全传输对称加密秘钥。为啥不用非对称加密直接通信呢?前面说过,非对称加密确实安全,但是它慢啊,而且非常慢。在保证了对称加密证书的可靠性之后,对称加密的通信也是安全的,那么后面就可以直接用更高效的对称加密通信了。
参考:https://www.cnblogs.com/scofi/p/6617394.html
参考:https://www.cnblogs.com/Leroscox/p/9627809.html
SSH公钥登录和RSA非对称加密的更多相关文章
- ssh rsa 非对称加密 基本原理
我们常用的ssh 免密登陆是用了 非对称加密的rsa算法(最为常用),与对称加密的相比会慢一些,但是更安全.秘钥长度超过768位无法破解. 默认长度是2048位(无法破解,非常安全) ssh-keyg ...
- [linux]SSH公钥登录
由于口令密码容易泄露,SSH公钥登录相比口令登录更加安全.SSH可以轻松使用非对称加密技术给两台机子订立契约,步骤如下: 第一步 本地机生成秘钥对 指令:ssh-keygen 功能:在本地(~/.ss ...
- SSH公钥登录原理
在平时工作中我们经常要远程登录服务器,这就要用到SSH协议: $ ssh user@host 主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录 密码口令登录 通过密码进行登录,主要流程为: ...
- 前后端数据加密传输 RSA非对称加密
任务需求:要求登陆时将密码加密之后再进行传输到后端. 经过半天查询摸索折腾,于是有了如下成果: 加密方式:RSA非对称加密.实现方式:公钥加密,私钥解密.研究进度:javascript与java端皆已 ...
- Atitit RSA非对称加密原理与解决方案
Atitit RSA非对称加密原理与解决方案 1.1. 一.一点历史 1 1.2. 八.加密和解密 2 1.3. 二.基于RSA的消息传递机制 3 1.4. 基于rsa的授权验证机器码 4 1.5. ...
- CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互
(以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 voi ...
- RSA非对称加密Java实现
原文 加密基础方法类 import java.security.MessageDigest; import sun.misc.BASE64Decoder; import sun.misc.BASE64 ...
- 前端js,后台python实现RSA非对称加密
先熟悉使用 在后台使用RSA实现秘钥生产,加密,解密; # -*- encoding:utf-8 -*- import base64 from Crypto import Random from Cr ...
- php RSA非对称加密 的实现
基本概念 加密的意义 加密的意义在于数据的传输过程中,即使被第三方获取到传输的数据,第三方也不能获取到数据的具体含义. 加密方式分为对称加密和非对称加密 什么是对称加密? 对称加密只使用一个秘钥,加密 ...
随机推荐
- VS2019中QT连接及使用
23:27:43 2019-08-09 qt连接VS 连接前提是在下载qt的时候将 MSVC 2017装上 点击扩展 选择管理扩展 搜索qt 选择下载 之后下载结束并重新打开后 会弹出一个 QT o ...
- Spring MVC 笔记--配置基于JavaConfig
主要使用基于 JavaConfig 方式配置 配置 DispatcherServlet 通过继承抽象类AbstractAnnotationConfigDispatcherServletInitiali ...
- Wireshark的使用(抓包、过滤器)
Wireshark的使用(抓包.过滤器) 听语音 分步阅读 Wireshark这个转包工具的简单实用 工具/原料 Wireshark软件包 方法/步骤 Wireshark是世界上最流行的网络分析工具. ...
- Mac下Web切图常用PS快捷命令
Mac下 Z 放大镜 双击放大镜 图片会回到100%大小 C 切片工具 B 画笔 alt 在B模式下 吸取颜色 M 选区(默认) 点击第二次M 矩形选区 可以固定大小 shift+c ...
- Windows&linux使用集成环境搭建 web 服务器
文章更新于:2020-02-17 按照惯例,需要的文件附上链接放在文首 文件名:phpStudy_64.7z 文件大小:78.3 M 下载链接https://www.lanzous.com/i9c6l ...
- java对于目录下的相关文件的单词操作
写入文件的目录.代码通过找目录下的文件,进行相关函数的操作.如果目录下面包含子目录.代码设有调用递归的方法,在寻找子目录下的文件 在进行相关的函数操作.函数主要是按用户输入的个数要求输出文件中出现次数 ...
- Linux网络架设篇,虚拟机l系统中网卡设备名与配置文件不符如何处理?
很多情况下,当我们在虚拟机中安装好linux系统后,并不能成功连上网.当我们配置好相关IP地址后同样不能成功连接网络.并且会体会网卡名与配置名不符,这时候应该怎么办呢? 1.清空下面文件 /etc/u ...
- idea运行gradle项目报错,找不到符号符号,方向xxxx类未知
报错: 解决:把build和run设置为idea
- Pytest系列(14)- 配置文件pytest.ini的详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest配置文件可以改变 ...
- .net跨域接口服务器端配置
在项目Config文件中添加一下节点配置 <system.webServer> <httpProtocol> <customHeaders> <add nam ...