1、公私钥简介与原理

公钥和私钥都属于非对称加密算法的一个实现,这个加密算法的信息交换过程是:

1) 持有公钥的一方(甲)在收到持有私钥的一方(乙)的请求时,甲会在自己的公钥列表中查找是否有乙的公钥,如果有则使用一个随机字串使用公钥加密并发送给乙。

2) 乙收到加密的字串使用自己的私钥进行解密,并将解密后的字串发送给甲。

3) 甲接收到乙发送来的字串与自己的字串进行对比,如过通过则验证通过,否则验证失败。

非对称加密算法不能使用相同的密钥进行解密,也就是说公钥加密的只能使用私钥进行解密。

2、使用密钥进行ssh免密登录

ssh使用私钥登录大致步骤就是:主机A(客户端)创建公钥私钥,并将公钥复制到主机B(被登陆机)的指定用户下,然后主机A使用保存私钥的用户登录到主机B对应保存公钥的用户。

(1) 实验环境
两台主机:

  1) 主机A(客户机):192.168.187.137

  2) 主机B(被登陆机):192.168.187.143

(2) 实验开始
  1,在需要免密登陆的主机(主机A)下生成公钥和私钥

## -t rsa可以省略,默认就是生成rsa类型的密钥
ssh-keygen -t rsa ## 生成时指定格式:按以下命令生成 RSA 格式的密钥对即可
ssh-keygen -m PEM -t rsa

  说明:命令执行后会有提示,输入三次回车即可,执行完成后会在当前用户的.ssh目录下生成两个文件:id_rsa、id_rsa.pub文件,前者是私钥文件,后者是公钥文件(拷贝到其他主机只需要拷贝这个文件的内容)。在linux上以“.”点开头的文件名或目录名称代表具有隐藏属性,通过ll命令或ls命令看不见。可通过 ll  -a 或者 ls -lath 查看。

  2,将公钥复制到被登陆的主机上的 ~/.ssh/authorized_keys 文件中
拷贝公钥有两种方法,其原理都相同:

方法一:使用 ssh-copy-id 直接拷贝

  使用 ssh-copy-id 进行拷贝公钥非常方便,只需要指定目标主机和目标主机的用户即可。

## 通过ssh-copy-id工具分发公钥内容到被登陆机上指定用户目录下
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.187.142

  执行这条命令后会自动将登录主机的公钥文件内容追加至目标主机中指定用户(root).ssh目录下的authorized_keys文件中。这个过程是全自动的,非常方便。需要预先安装openssh插件。

方法二:自己创建文件进行拷贝

  1) 在登录主机(客户机)上创建authorized_keys文件并将公钥追加到该文件。

先cd到登录机使用的用户下的 .ssh 目录,方便操作

## 进入当前用户的.ssh目录(按实际情况指定用户即可)
cd ~/.ssh/
## 将公钥追加到授权关键列表
cat id_rsa.pub >> authorized_keys
## 修改文件权限为600,该文件有规定如果属组其他人出现可写则文件就不会生效
chmod 600 authorized_keys

  2) 在被登录机的指定用户家目录下创建 .ssh 目录(这里在root用户下创建,因为要使用密钥登陆到root用户)

# 进入当前用户家目录(按实际情况指定)
cd ~/ # 查看有没有.ssh目录,一般安装过openssh都会有
ls -lath
# 如果确实没有,手动创建也一样
mkdir .ssh ##将目录权限改为700该目录的权限必须是700才有效
chmod 700 .ssh

  3) 将登录机创建的authorized_keys文件拷贝到被登录机,使用scp

# 登录机上的.ssh/目录下操作
scp authorized_keys root@192.168.187.142:/root/.ssh/ authorized_keys 100% 402 576.4KB/s 00:00

当然你也可以直接拷贝登录机上的公钥id_rsa.pub内容文本,粘贴到被登录机上的authorized_keys文件里面粘贴,是一样的啦。

  3,登录
使用主机A以root用户身份登陆到主机B

ssh root@192.168.187.142
# 登录成功如下
Last login: Wed Feb 13 15:24:30 2019 from 192.168.187.137

首次登录将弹出保存信息,输入yes即可,此时已经实现了免密的密钥登陆。

注意事项和说明:

1,上例只能实现主机A免密登陆到主机B的root用户,如果想让主机B也免密登录到主机A,创建密钥和拷贝步骤相同。

2,密钥登陆的方式只能登录被登录机中 .ssh 目录下有对应公钥的用户,如果想让所有用户都可以被登录则需要将authorized_keys文件的内容追加到其他用户的 ~/.ssh/authorized_keys 文件中。

3,如果要在登录机上登录很多台目标机器,那么将公钥分发到每一台目标机器上就行,步骤同上。

4,如果使用自己创建的authorized_keys文件进行复制公钥则要严格设置权限,权限不正确会导致文件无法使用,也就无法进行密钥验证。

3、 ssh的两种登陆方式介绍

(1) 口令验证登录

(2) 密钥验证登录
密钥验证的前提需要登陆主机生成一对密钥(公钥和私钥),并将公钥放置在服务器上。

4、 总结

ssh密钥登录可以实现免密登录,免密登陆有很多用途:例如scp免认证、rsync备份免交互等一切使用ssh认证的地方均可以免交互,也就实现了自动化。

密钥认证的大概步骤

1) 客户端(登录主机)生成一对密钥:# ssh-keygen

2) 将客户机的公钥复制到服务端(被登陆主机)要登录的用户的 ~/.ssh/authorized_keys 文件中:# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.187.142

注意:如果使用自己复制的方法,一定要注意.ssh目录和authorized_keys文件的权限,前者是700,后者是600

3) 使用客户机ssh连接服务端或者使用ssh协议认证的程序即可实现免密,免交互

注意:要想两端登录同时免密,就在主机B(被登陆机)也创建密钥然后将公钥拷贝到主机即可。

linux的无密码登录,利用RSA加密原理。使用rsa生成公钥和私钥。

可以理解为:公钥是锁放在被登录的服务器上,私钥是钥匙放在客户端。锁和钥匙匹配就可以登录。

1,安装相关软件:

yum install ssh

ssh里包含ssh和ssh-keygen

2,在客户机生成公钥和私钥:方法在前面讲过,这里省略。生成:id_rsa.pub(公钥-锁) 和 id_rsa(私钥-钥匙)

3,将公钥放的被登录机器:方法在前面讲过,这里省略。如果拷贝id_rsa.pub到authorized_keys(注意可能会多拷贝回车,可以拷贝编辑器检查一下)

4,登录服务器:

ssh 目标用户@目标ip

5,文件介绍;
客户机端:
  id_rsa.pub(公钥-锁)
  id_rsa(私钥-钥匙)
  known_hosts(记录链接到对方时,对方给的hostkey,连线会检查目前对方给的hostkey 与记录的hostkey是否相同,进行简单的验证)
被登录机端:
  authorized_keys (被登录机的公钥放置文件--锁的位置,可能会有多个锁)

Linux密钥rsa加密原理和ssh使用密钥实现免密码登录的更多相关文章

  1. Linux密钥登录原理和ssh使用密钥实现免密码登陆

    目录 1. 公钥私钥简介 2. 使用密钥进行ssh免密登录 2.1. 实验环境 2.2. 开始实验 3. ssh的两种登陆方式介绍 3.1. 口令验证登录 3.2. 密钥验证登录 4. 总结 1.公私 ...

  2. 配置ssh连接会话复用免密码登录

    我们经常使用ssh连接远程主机,为了方便,避免每次登录输入密码,通常使用密钥登录.如果没有设置密钥, 则需要使用密码登录了,若每次都输入密码则十分繁琐.我们可以设置ssh连接会话复用,则登录成功后,会 ...

  3. Windows使用SSH Secure Shell实现免密码登录CentOS

    笔记来自:http://blog.csdn.net/jiangshouzhuang/article/details/50683049 1.在Windows上生成密钥找到Secure Shell Cli ...

  4. 设置 ssh 使用public key 免密码登录

    第一步,生成自己公钥, 私钥 1: ssh-keygen -t rsa 2:   3: root@yjlml:~# ssh-keygen -t rsa 4: Generating public/pri ...

  5. 实现利用公钥私钥免密码登录Linux服务器

    原理 客户端生成公钥私钥,把公钥拷贝给linux服务器,用自己的私钥连接服务器.实现如下: 如果是两台Linux服用器A和B,A来实现免密码登录B A执行ssh-keygen -t rsa 就会在/r ...

  6. 关于配置ssh免密码登录后,仍提示输入密码

    一.在A端创建密钥对: [root@A ~] -P '' 二.如果B机器没有.ssh和authorized_keys文件则创建这个文件夹和文件先,创建后要chown改成当前用户的所属者,其次也要改: ...

  7. 大数据平台-修改主机名及ssh免密码登录

    一.查看服务器初始配置: 1.总核数 = 物理CPU个数 X 每颗物理CPU的核数 2.总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /pr ...

  8. Linux使用ssh公钥实现免密码登录Linux

    ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例.有机器A(192.168.1.155),B(192.168.1.181).现想A ...

  9. Xshell配置ssh免密码登录-密钥公钥(Public key)与私钥(Private Key)登录【已成功实例】

    本文转自https://blog.csdn.net/qjc_501165091/article/details/51278696 ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口 ...

  10. linux ssh公钥免密码登录

    ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 一.SSH公钥登录原理 在平时工作中我们经常要远程登录服务器,这就要用到SSH ...

随机推荐

  1. ARC143D Bridges

    ARC143D Bridges 巧妙的图论题. 思路 分析题目,发现很像拆点. 由于拆点要设置出入点,这里我们也把 \(a_i\) 设成入点,把 \(a_i+n\) 设成出点,再次分析问题. 考虑我们 ...

  2. 超聚变服务器2288H V6使用 iBMC 安装 Ubuntu Server 24.04 LTS及后续系统配置

    一. 超聚变服务器iBMC远程管理 超聚变服务器的iBMC芯片集成了一个专用的管理GE网口,提供全面的故障诊断.自动化运维.硬件安全加固等管理特性.iBMC支持Redfish.SNMP.IPMI 2. ...

  3. python中的多继承理解

    在python的多继承中,父类的初始化顺序遵循所谓方法解析顺序(Method Resolution Order,MRO)的机制.python使用C3线性化算法来确定多继承类的MRO: 1. 目标:创建 ...

  4. 霍夫丁(Hoeffding)不等式证明

    马尔可夫不等式 结论 对于任意非负随机变量$X$,$\forall \epsilon>0$,有: $\displaystyle P(X\ge\epsilon)\le\frac{E(X)}{\ep ...

  5. SpringFlex框架搭建

    或者参考http://limingnihao.iteye.com/blog/830409.使用Eclipse的Maven构建SpringMVC项目. 1.1 简单介绍 Spring是一个轻量级的控制反 ...

  6. Maven多模块项目 eclipse热部署 Maven项目实现 tomcat热部署

    Maven 多模块项目在eclipse下面热部署,即你可以体验下无论你修改整个项目里面的任何模块的代码,都不需要用maven打包就可以看到效果, 1.首先准备好创建一个maven多项目的代码,准备好一 ...

  7. Nuxt.js 应用中的 dev:ssr-logs 事件钩子

    title: Nuxt.js 应用中的 dev:ssr-logs 事件钩子 date: 2024/11/28 updated: 2024/11/28 author: cmdragon excerpt: ...

  8. @EnableAutoConfiguration 标签使用

    @EnableAutoConfiguration 这个注解的作用是: 从classpath中搜索所有META-INF/spring.factories配置文件然后,将其中org.springframe ...

  9. Nuxt.js 应用中的 request 事件钩子

    title: Nuxt.js 应用中的 request 事件钩子 date: 2024/12/4 updated: 2024/12/4 author: cmdragon excerpt: 在构建现代 ...

  10. 【漏洞分析】Vestra DAO 攻击事件:这个质押项目它取款不核销呀

    背景信息 攻击交易:https://app.blocksec.com/explorer/tx/eth/0x9a1d02a7cb9fef11fcec2727b1f9e0b01bc6bcf5542f5b6 ...