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. c++11多线程入门<学习记录>

    最近学习了c++多线程相关知识,也算是对这方面内容的入门 视频链接c++11并发与多线程视频课程 看了大概两周,简单进行总结 参考文章C++11并发与多线程 PS:c++11提供了标准的可跨平台的线程 ...

  2. 9-5 额外的string操作

    9.5.1 构造string的其他方法:略 9.5.2 改变string的其他方法:略 9.5.3 string搜索操作:略 9.5.4 compare函数:略 9.5.5 数值转换 int main ...

  3. games101_Homework7

    实现完整的 Path Tracing 算法 需要修改这一个函数: • castRay(const Ray ray, int depth)in Scene.cpp: 在其中实现 Path Tracing ...

  4. Help document of CAD Plus

    中文使用帮助 Help for Mobile Update time: 2023-07-29; This article will help you how to use the CAD Plus a ...

  5. Tomcat并发数优化的方法总结

    web应用的并发提升,除了负载均衡.在小企业中也可以通过一些软件的上的设置来进行一些优化.下面是一些在服务器上修改tomcat参数的优化方法,非常简单实用!(这些方法通过网络整理的) 1,让Tomca ...

  6. 安装cnpm时报错

    报错:npm WARN deprecated socks@1.1.10: If using 2.x branch, please upgrade to at least 2.1.6 to avoid ...

  7. 命令行应用开发初学者指南:脚手架篇、UI 库和交互工具

    在日常的前端开发工作中,我们经常依赖各种命令行工具来提高效率和代码质量.例如,create-react-app 和 eslint 等工具不仅简化了项目的初始化过程,还能自动执行代码检查和格式化任务.当 ...

  8. Mybatis【19】-- Mybatis自关联多对多查询

    注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-15-oneself-many2many,需要自取 ...

  9. 逆向WeChat(八)

    上一篇逆向WeChat(七)是逆向微信客户端本地数据库相关事宜. 本篇逆向微信客户端本地日志xlog相关的事宜. 本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/18 ...

  10. Mybatis 实现多字段动态排序

    背景 在项目的开发过程中,可能会遇到对数据表多个字段进行排序的需求(第一句话就这么难懂,不要害怕,万事开头难,结尾更难,开玩笑哒),结合需求轻松易懂. 需求 现在有一张User表 男同学先按 age ...