前面是理论基础,后部分是免密搭建详细步骤。

Secure Shell

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,目的是在不安全的网络中为网络服务提供安全的传输环境。
SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统。

传统的网络服务

传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道" 。

SSH用途

SSH以非对称加密实现身份验证。身份验证有多种途径,例如其中一种方法是使用自动生成的公钥-私钥对来简单地加密网络连接,随后使用密码认证进行登录;另一种方法是人工生成一对公钥和私钥,通过生成的密钥进行认证,这样就可以在不输入密码的情况下登录。任何人都可以自行生成密钥。公钥需要放在待访问的电脑之中,而对应的私钥需要由用户自行保管。认证过程基于生成出来的私钥,但整个认证过程私钥本身中不会传输到网络中。

在类Unix系统中,已许可登录的公钥通常保存在用户 /home 目录的 ~/.ssh/authorized_keys 文件中[9],该文件只由SSH使用。当远程机器持有公钥,而本地持有对应私钥时,登录过程不再需要手动输入密码。另外为了额外的安全性,私钥本身也能用密码保护。

私钥会保存在固定位置,也可以通过命令行参数指定(例如ssh命令的“-i”选项)。ssh-keygen是生成密钥的工具之一。

SSH也支持基于密码的身份验证,此时密钥是自动生成的。若客户端和服务端从未进行过身份验证,SSH未记录服务器端所使用的密钥,那么攻击者可以模仿服务器端请求并获取密码,即中间人攻击。但是密码认证可以禁用,而且SSH客户端在发现新密钥或未知服务器时会向用户发出警告。

SSH的经典用途是登录到远程电脑中执行命令。除此之外,SSH也支持隧道协议、端口映射和X11连接。借助SFTP或SCP协议还可以传输文件。

SSH使用客户端-服务器模型。

服务器端需要开启SSH守护进程以便接受远端的连接,而用户需要使用SSH客户端与其创建连接。标准端口中的22端口分配给了SSH服务[10]。

大多数现代操作系统(包括macOS、大部分Linux、OpenBSD、FreeBSD、Solaris等系统)都提供了SSH,但Windows系统未自带SSH程序。Windows用户可以使用Cygwin来创建SSH服务。SSH客户端种类很多,包括专有软件、免费软件和开源软件,例如PuTTY和传输文件专用的WinSCP等。

从云计算的角度上讲,SSH能够阻止一些因直接暴露在互联网而产生的安全问题,在解决连接问题上发挥了重要作用。SSH隧道可以在互联网、防火墙和虚拟机之间提供一个安全的通道[11]。

SSH基本架构

SSH协议框架中最主要的部分是三个协议:

传输层协议(The Transport Layer Protocol):传输层协议提供服务器认证,数据机密性,信息完整性等的支持。
用户认证协议(The User Authentication Protocol):用户认证协议为服务器提供客户端的身份鉴别。
连接协议(The Connection Protocol):连接协议将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用。
同时还有为许多高层的网络安全应用协议提供扩展的支持。

各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。

安全验证

在客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于密码的安全验证),知道帐号和密码,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,可能会有别的服务器在冒充真正的服务器,无法避免被“中间人”攻击。
第二种级别(基于密钥的安全验证),需要依靠密钥,也就是你必须为自己创建一对密钥,并把公有密钥放在需要访问的服务器上。客户端软件会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在你在该服务器的用户根目录下寻找你的公有密钥,然后把它和你发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有密钥加密“质询”(challenge)并把它发送给客户端软件。从而避免被“中间人”攻击。
在服务器端,SSH也提供安全验证。 在第一种方案中,主机将自己的公用密钥分发给相关的客户端,客户端在访问主机时则使用该主机的公开密钥来加密数据,主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确保数据的保密性。 在第二种方案中,存在一个密钥认证中心,所有提供服务的主机都将自己的公开密钥提交给认证中心,而任何作为客户端的主机则只要保存一份认证中心的公开密钥就可以了。在这种模式下,客户端必须访问认证中心然后才能访问服务器主机。

如何新建密钥对呢?

1.查是否已存在密钥对,打开终端(Terminal)

输入:ls -al ~/.ssh

查看是否输出密钥对,如果有的话,会输出如下文件信息:id_rsa 和 id_rsa.pub

-rw------- 1 taoshilei staff 1679 Jun 25 22:34 id_rsa
-rw-r--r-- 1 taoshilei staff 403 Jun 25 22:34 id_rsa.pub

2、如果没有,则需要我们手动创建

输入:ssh-keygen -t rsa -b 4096 ,

一直 enter 即可。执行成功之后,可以在 ~/.ssh 下面看到 两个文件 id_rsa 和 id_ras.pub

说明:

ssh-keygen 是生成秘钥的工具之一。

SSH supports several public key algorithms(公开秘钥算法) for authentication keys.

1.rsa - A key size of at least 2048 bits is recommended for RSA; 4096 bits is better.
2.dsa - DSA in its original form is no longer recommended.(不推荐使用)
3.ecdsa - Only three key sizes are supported: 256, 384, and 521 (sic!) bits.(大多数ssh客户端支持)
4.ed25519 - Support for it in clients is not yet universal. (还没有普及)

The algorithm is selected using the -t option and key size using the -b option.

-t 参数指定加密算法,-b 参数指定加密的

用法如下:

ssh-keygen -t rsa -b 4096

3.将公钥发送到服务器

使用 ssh-copy-id 工具。

用法:

ssh-copy-id -i 公钥位置 user@host

之后会提示输入密码进行认证。

在这之后,公钥就会被添加到 服务器上的 ~/.ssh/authorized_keys 文件了里面。

一旦在服务器上配置了公钥,服务器会允许任何具有私钥的客户端进行连接用户登录,在登录的过程中,客户端会通过数字签名交换来证明拥有私钥。

4.测试是否可以免密登录 ,在服务器01上面 ssh 连接另一台服务器

免密登录图解

创建密钥并添加到服务器上。

登录认证流程

值得注意的是:服务端的 .ssh目录权限必须是700(rwx------),authorized_keys文件的权限是600(rw-------)

部分参考
https://www.ssh.com/ssh/keygen/#sec-What-Is-ssh-keygen

SSH详解以及免密登录配置,深入理解相关推荐

  1. 玩转 ssh 免密登录配置:使用两个环境模拟配置成功和其他几种失败的情况

    一.引言 最近在工作中,我遇到了这么一个需求: 我们需要每天给客户环境发送一个打包文件,对此,客户环境提供了一个 sftp 服务来接收我们的文件 这是一个非常简单的需求场景,但是这个需求对于我项目的要 ...

  2. ssh免密登录配置方法及配置

    ssh免密登录配置方法及配置 直接上步骤,记我们本机为机器A,而机器B.机器C等是我们的服务器,我们要配置的是A到B.C等的 ssh 免密登录. 1 在机器A上生成秘钥对 ssh-keygen 会得到 ...

  3. 【Linux】SSH免密登录配置

    SSH免密登录配置 前提:两用户已存在 用户A:user_a 用户B:user_b 先要求从user_a到用户user_b进行ssh和scp免密登录. 登录用户user_a 1. 检查/home/us ...

  4. mac、Linux SSH 阿里云 vultr免密登录服务器

    mac.Linux SSH 阿里云 vultr免密登录服务器 当你拥有了自己云服务器的时候,一定为了每次登录服务器输入密码特别痛苦. 那么福利来了,简单配置一下,免密登录你的服务器,希望能帮到大家 注 ...

  5. ssh免密登录配置(两行命令搞定)

    最简单的ssh免密登录的配置 1.准备工作 2.命令行操作 3.互相免密登录 1.准备工作 确保两台服务器的用户名字相同,这里以用户名是username,服务器A要免密登录到服务器B为例子.注意:以下 ...

  6. Hadoop学习之SSH免密登录配置(以三台虚拟机为例,完全分布式)

    目录 1.更改主机名(便于进行操作) 方法一 ​编辑 方法二 2.配置SSH免密登录 1.生成秘钥 2.移动秘钥 3.秘钥分配 4.验证免密登录 1.更改主机名(便于进行操作) 本文操作需在root用 ...

  7. macos配置ssh别名登陆并免密登录

    本机配置 文件路径:cd ~/.ssh 编辑config,如果没有新建:touch confing 内容如下 # 输入ECS实例的别名,用户SSH远程连接. Host my_server # 输入EC ...

  8. Hadoop集群搭建(二:集群主机间免密登录配置)

    实验目的及要求: 静态网络地址配置: 主机名的配置: 防火墙的配置,使平台相关软件的常用端口能够远程正常访问: 主机地址映射的配置,使所有主机能够通过主机名相互正常访问: 免密码登录的配置,使所有主节 ...

  9. 设备远程连接—安卓端连接linux云服务器以及免密登录配置

    1.下载Termux 下载地址 2.pkg 命令执行软件安装 在安卓机上成功安装Termux后,我们进入Termux使用pkg命令进行软件安装 订阅附加仓库 root-repo :pkg instal ...

最新文章

  1. 正视自己的所想所求,活出真实的自己
  2. 数据科学家线性规划入门指南
  3. 怎样能用计算机打出表白数字,怎么用数字表白?盘点数字表白暗语
  4. [转]Myeclipse9引入easy_ui时,其中的部分js文件报错
  5. java怎么预加载字典值,有选择地显示预加载内容提高网站的性能
  6. Boblog热门日志、随机日志、热门Tags插件源代码
  7. oracle索引有哪些分类,Oracle中的索引分类
  8. 在Ubuntu中安装pycharm社区版
  9. 广义线性模型和线性回归
  10. P2P业务整体流程图
  11. PS_1_认识主界面_新建文档(分辨率)_打开保存(序列动画)
  12. 服务器带宽打开网页很慢,移动宽带打开网页慢?两招治本移动宽带打开网页速度慢的解决方法...
  13. automake 框架_centos 配置go-mrico框架
  14. 用java开发app的步骤,看看这篇文章吧!
  15. 领导绝不会告诉你的,提拔干部的三大关键因素
  16. 阿里云域名https证书(ssl证书)配置
  17. 【转】在win10接双显示器(扩展模式)怎么把鼠标游标切换到第二台显示器上?
  18. 初中计算机病毒教学流程图,3904000261《计算机病毒》(高中信息技术)教学设计方案...
  19. python能超越java吗_為什么Python能超越JAVA,有什么優勢?
  20. 全国青少年软件编程等级考试内容,知识点思维导图(Scratch编程四级)

热门文章

  1. 美的物联平台的云上实践与应用
  2. selenium + python自动化测试unittest框架学习(一)selenium原理及应用
  3. Apache Shiro java安全框架
  4. python定时下载FTP指定文件
  5. 垃圾回收器如何确定哪些对象要回收---《深入理解java虚拟机》
  6. install cuda5 on ubuntu12.04
  7. web.py开发web 第一章 Hello World
  8. ExtJs之Ext.data.Store
  9. Nginx使用HTTPS建立与上游服务器的网络通信
  10. ZooKeeper Java示例