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://www.cnblogs.com/scofi/p/6617394.html

非对称加密在很多地方都有应用,如HTTPS。HTTPS的非对称加密还涉及到一个CA证书颁发机构,先通过CA根证书以非对称加密的方式进行认证,然后再从服务器拿到公钥,之后再用公钥加密传输对称加密要用到的秘钥,这样就保证了对称加密证书的安全性,接着就可以愉快的用对称加密来进行通信了。

非对称加密在这里有两个作用:认证和安全传输对称加密秘钥。为啥不用非对称加密直接通信呢?前面说过,非对称加密确实安全,但是它慢啊,而且非常慢。在保证了对称加密证书的可靠性之后,对称加密的通信也是安全的,那么后面就可以直接用更高效的对称加密通信了。

参考:https://www.cnblogs.com/scofi/p/6617394.html

参考:https://www.cnblogs.com/Leroscox/p/9627809.html

SSH公钥登录和RSA非对称加密的更多相关文章

  1. ssh rsa 非对称加密 基本原理

    我们常用的ssh 免密登陆是用了 非对称加密的rsa算法(最为常用),与对称加密的相比会慢一些,但是更安全.秘钥长度超过768位无法破解. 默认长度是2048位(无法破解,非常安全) ssh-keyg ...

  2. [linux]SSH公钥登录

    由于口令密码容易泄露,SSH公钥登录相比口令登录更加安全.SSH可以轻松使用非对称加密技术给两台机子订立契约,步骤如下: 第一步 本地机生成秘钥对 指令:ssh-keygen 功能:在本地(~/.ss ...

  3. SSH公钥登录原理

    在平时工作中我们经常要远程登录服务器,这就要用到SSH协议: $ ssh user@host 主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录 密码口令登录 通过密码进行登录,主要流程为: ...

  4. 前后端数据加密传输 RSA非对称加密

    任务需求:要求登陆时将密码加密之后再进行传输到后端. 经过半天查询摸索折腾,于是有了如下成果: 加密方式:RSA非对称加密.实现方式:公钥加密,私钥解密.研究进度:javascript与java端皆已 ...

  5. Atitit RSA非对称加密原理与解决方案

    Atitit RSA非对称加密原理与解决方案 1.1. 一.一点历史 1 1.2. 八.加密和解密 2 1.3. 二.基于RSA的消息传递机制  3 1.4. 基于rsa的授权验证机器码 4 1.5. ...

  6. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 voi ...

  7. RSA非对称加密Java实现

    原文 加密基础方法类 import java.security.MessageDigest; import sun.misc.BASE64Decoder; import sun.misc.BASE64 ...

  8. 前端js,后台python实现RSA非对称加密

    先熟悉使用 在后台使用RSA实现秘钥生产,加密,解密; # -*- encoding:utf-8 -*- import base64 from Crypto import Random from Cr ...

  9. php RSA非对称加密 的实现

    基本概念 加密的意义 加密的意义在于数据的传输过程中,即使被第三方获取到传输的数据,第三方也不能获取到数据的具体含义. 加密方式分为对称加密和非对称加密 什么是对称加密? 对称加密只使用一个秘钥,加密 ...

随机推荐

  1. Docker的MySQL镜像, 实行数据,配置信息,日志持久化

    Docker的MySQL8镜像, 实行数据持久化 使用Docker的MySQL8.0.17实例化一个容器之后需要对其进行数据持久化操作, 使用 docker docker run -p 7797:33 ...

  2. STM32CubeMX的安装

    1.下载STM32CubeMX 在ST的官方网站上下载STM32CubeMXXX软件的安装包. 下载的安装包如下图所示.双击SetupSTM32CubeMX-5.0.1.exe. 安装STM32Cub ...

  3. docker搭建可视化portainer

    一.在docker中查询portainer # docker search portainer 二.下载portainer # docker pull portainer/portainer 三.运行 ...

  4. Java代理笔记

    代理顾名思义,就是一个中间层,当我们要使用某个方法时,不直接调用,而是告诉代理,让代理替我们去请求方法,并返回结果.在这个过程中,我们只知道代理执行并返回给了我们操作结果,至于它有没有其他操作并不知道 ...

  5. 薅羊毛? 月入10万? | 这是自动化测试老司机的特长--Python自动化带你薅视频红包,一个都不放过!

    一.目标场景 如今短视频横行的时代,以某短视频为首的,背后依靠着强大的资金后盾,疯狂地对平台用户进行红包轰炸. ​ 与传统的红包不一样,视频红包包含位置的不确定性.大小不确定性.元素 ID 的不确定性 ...

  6. Tcl编成第二天,set与unset

    代码如下: #!/usr/bin/tclsh set value "one" puts $value unset value puts $value set表示创建一个变量第一个参 ...

  7. 22.4 Extends --super 和 this 的区别

    /* * this和super的区别 this:当前对象的引用 调用子类的成员变量 调用子类的成员方法 在子类的构造方法第一行调用子类其他构造方法 super:子类对象的父类引用 调用父类的成员变量 ...

  8. Django ORM操作数据库常用API

    昨天晚上,我们完成了一个简单的实例来对数据库表进行操作.今天,我们要熟悉更多的API,实现更复杂的功能.这一步完成了,我们对小型数据的操作问题也就不大了. 现在,我们还是参考django官方文档,来进 ...

  9. delphi中DateTimePicker控件同时输入日期和时间

    将DateTimePicker的Format属性中加入日期格式设成 'yyyy-MM-dd HH:mm',注意大小写 , 将kind设置为dtkTime即可,可以在每次Form onShow时将Dat ...

  10. ASE team work proposal

    Hi,我们是Azure Wrapper,欢迎来到我们的blog~我们将在这里记录下ASE课程的滴滴点点,美妙的旅程就要开始啦! 以下是每位队员提交的关于ASE 团队项目的提议: 朱玉影: 随着信息时代 ...