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非对称加密 的实现
基本概念 加密的意义 加密的意义在于数据的传输过程中,即使被第三方获取到传输的数据,第三方也不能获取到数据的具体含义. 加密方式分为对称加密和非对称加密 什么是对称加密? 对称加密只使用一个秘钥,加密 ...
随机推荐
- Gin框架04:趣谈参数绑定与校验
导读 在第二节,我们学习了Gin框架的路由定义与参数接收,今天应一位同学的要求,来讲解一下参数的绑定与校验. 为什么校验参数? 本不必抛出这个问题的,但顾及到初出茅庐的同学,这里解释一下. 假设做一个 ...
- CPU、内存、硬盘、指令之间的关系
我们都知道所有的程序最终都是一系列计算机能够识别的指令和数据,通过执行这些指令来控制整个计算机. 而CPU就是负责读取和解释执行这些指令的,CPU主要包括运算器.控制器和寄存器,控制器负责把指令.数据 ...
- Oauth2.0详解,Oauth2.0协议原理
角色: RO (resource owner): 资源所有者,对资源具有授权能力的人,通常比喻为用户 RS (resource server): 资源服务器,存储资源.并处理对资源的访问请求 Clie ...
- Elasticsearch创建mapping
(put)请求方式 http://192.168.1.200:9200/index_mapping body 参数 { "mappings":{ "properties& ...
- PXE基础装机环境
PXE基础装机环境 案例1:PXE基础装机环境 案例2:配置并验证DHC ...
- 面试刷题37:微服务是什么?springcloud,springboot是什么?
面试中被问到为什么要使用微服务架构?springcloud的核心组件有哪些? 拿我们国家的兵种来说,如何把战争这个单体架构微服务化,就是根据适用的场景,拆分出不同的兵种(微服务) 然后每个兵种之间通过 ...
- dockerfile_php_apache
apache-alpine.docker php-apache.docker php-alpine php-apache-alpine.docker FROM httpd:2.4.39-alpine
- wireshark抓包实战(六),过滤器
目录 一.抓包过滤器 1.语法来源 2.语法 二.显示过滤器 1.语法来源 2.关键要素 wireshark中,过滤器有两种,一种是抓包过滤器,一种是显示过滤器! 抓包过滤器适合大网络环境,配置与抓包 ...
- Python之 module安装
如出现这种错误 ModuleNotFoundError: No module named 'numpy' 这种错误通常不会出现,因为Python的模块,通常在你安装Python shell的时候,就已 ...
- 队列的含义以及C语言实现顺序队列
队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构. 什么是队列 与栈结构不同的是,队列的两端都"开口",要求数据只能从 ...