SSH免密登录详解

SSH(Security Shell)安全外壳协议,是较为可靠的,专为远程登录会话和其他网络服务提供安全保证的协议。

​ 对于传统的网络服务程序(例如,FTP,Telnet等)来说,其本质上并不是安全的,主要原因在于,这些网络应用程序在网络上都是直接使用明文传输口令和数据的,对于别有用心的人来说,这些口令和数据是很容易被截获的。另外,这些网络服务程序的安全验证方式也是存在弱点的,非常容易受到中间人(Man-In-The-Middle)这种方式的攻击,简而言之,就是中间人冒充真正的服务器接收你传输的数据,然后,再将数据转发给真正的服务器,通过这种方式中间人就可以神不知鬼不觉地拿到你所有数据。

​ 通过使用SSH,则可以将所有传输的数据及口令进行加密,从而防止中间人攻击,还可以防止DNS和IP欺骗,另外,使用SSH还有加快传输速度的好处,原因在于,SSH是可以对数据进行压缩的。

SSH安装详解

SSH是安全外壳协议,而open-ssh则是SSH的开源实现,CentOS通常是默认安装了open-ssh的。

整个SSH服务是包含SSH服务端(openssh-server)和SSH客户端(openssh-clients)的,常用的ssh命令就是客户端一部分。

SSH服务端与SSH客户端之间的关系:节点A想要控制节点B,则节点A上需要安装SSH客户端,而节点B上需要安装相应的SSH服务端,这样,节点A才能向节点B发送控制命令和数据。

# 安装openssh-server
[root@cos1 ~]# yum install -y openssh-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
Package openssh-server-7.4p1-21.el7.x86_64 already installed and latest version
# 启动openssh-server
[root@cos1 ~]# systemctl start sshd.service
# 安装openssh-clients
[root@cos1 ~]# yum install -y openssh-clients
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
Package openssh-clients-7.4p1-21.el7.x86_64 already installed and latest version

openssh服务的主配置文件路径:/etc/ssh/sshd_config

# SSH-Server常见的配置项
# 如果SSH连接提示端口不可用,可以在改文件中查看SSH端口,端口没问题,就要考虑SSH服务是否正常启动了
# SSH客户端与服务端连接的默认端口号
Port 22

默认情况下,SSH服务提供了以下两个非常有用的功能:

1、类似Telnet远程连接服务器功能,即SSH服务(安全可靠的远程登录会话服务)

# 远程连接服务
ssh user@hostname/ip

2、类似FTP的sftp-server服务,借助SSH协议来传输数据,提供更安全的SFTP服务(vsftp, proftp).

# 文件拷贝服务
scp files user@hostname:/path/

SSH免密登录配置

​ 对于分布式环境组件(例如,Hadoop,HBase等)来说,组件的主/从节点通常需要远程登录到集群中其他节点并执行Shell命令,如果不使用SSH,则集群安全就无法保证,使用SSH服务的话,又需要用户输入目标服务器的免密,而主/从节点何时访问其他节点是不可控的,而且,频繁的需要用户输入密码也是不可行的,这时候,免密登录就非常重要的。

主机A通过SSH实现免密登录主机B所需的配置过程大致可以分为以下两步:

1、主机A在本地通过加密算法生成公钥和私钥

通过rsa算法生成公钥和私钥key对,默认情况下,身份验证信息(也就是私钥)保存在/user/.ssh/id_rsa文件下,而公钥信息则保存在/user/.ssh/id_rsa.pub文件中。

[root@cos1 .ssh]# pwd
/root/.ssh
[root@cos1 .ssh]# ll
total 8
-rw-------. 1 root root 1679 Jun 22 00:04 id_rsa
-rw-r--r--. 1 root root 391 Jun 22 00:04 id_rsa.pub

2、将主机A的公钥拷贝到主机B的授权文件(authorized_keys)中

# 通过ssh-copy-id命令将本地服务器公钥上传到指定服务器
[root@cos1 ~]# ssh-copy-id root@cos
... ... ... ... ... ...
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@cos'"
and check to make sure that only the key(s) you wanted were added.
# 现在,可以通过ssh root@cos访问主机cos了
[root@cos1 ~]# ssh root@cos
Last login: Thu Jun 18 06:38:25 2020 from 192.168.58.1
[root@cos ~]#

为了安全起见,通常将保存具体哪些主机可以免密访问当前主机的授权文件authorized_keys文件设置为及root具有查看和修改的权限,用户组及其他人无权访问。

通过ssh-copy-id将主机A的公钥拷贝到主机B之后,本质上,是在主机B的授权文件中添加了主机A的公钥。

[root@cos .ssh]# ll
total 8
-rw-------. 1 root root 781 Jun 22 00:16 authorized_keys
-rw-r--r--. 1 root root 176 Jun 18 07:34 known_hosts

注意:

1、免密登录,是用户对用户的,切换为其他用户时,仍需要输入密码

2、免密登录是单向的,也就是说,主机A将公钥拷贝到主机B后,主机A可以免密登录主机A,而主机B登录主机A时仍然需要输入密码

图解SSH免密登录原理

通过上面一顿操作,主机A就可以免密登录到主机A了,感觉有点神奇,那么,免密登录到底是怎么实现的呢?也就是说,SSH协议又到底是什么样子呢?且看下图分解~

上图便是整个SSH免密登录的配置及原理图:

1、ServerA生成公钥并上传到ServerB上

2、Step 1: ServerA发送链接请求到ServerB

3、Step 2: ServerB在authorized_key中检索ServerA的公钥,随机生成字符串,随后利用公钥对字符串进行加密,并发送给ServerA

4、Step 3: ServerA接收到密文后,利用私钥进行解密,并将内容以明文的形式发送给ServerB

SSH免密登录详解的更多相关文章

  1. 配置ssh免密登录遇到的问题——使用VMware多虚拟机搭建Hadoop集群

    搭建环境: 虚拟机 VMware12Pro      操作系统  centos6.8        hadoop 1.2.1 1.导入镜像文件,添加java环境 1.查看当前系统中安装的java,ls ...

  2. 【Linux】文件权限,ssh免密登录

    1.文件/文件夹权限 例子: -rw-r--r--. 1 root root 12288 Aug 21 09:50 aliases.db drwxr-xr-x. 2 root root 4096 Au ...

  3. linux(十)配置ssh免密登录实现

    知道ssh的朋友应该知道它是用来干什么的,如果你不知道什么是ssh远程登录的话,可以去看一下我的上一篇博客,关于linux的网络基础的知识.备注:ssh是用于远端登入.执行ssh指令开启终端机阶段作业 ...

  4. 【Linux】ssh免密登录

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

  5. Ubuntu如何配置SSH免密登录

    前言 在搭建hadoop集群时,需要主机和副机之间实现SSH免密登录 一.环境准备 1.ubuntu两台 二.安装SSH 1.首先检测一下本机有没有安装SSH服务,如果没有任何打印说明未安装 sudo ...

  6. linux 远程ssh免密登录

    写在前面 先说说需求: 我们平时开发.运维操作linux过程中经常需要实现将远程文件拷贝到本地或者本地文件拷贝到远程:执行远程命令等操作:这个时候建立ssh免密登录应该是一个比较好的选择: 原理 在l ...

  7. linux服务器ssh免密登录

    环境:两台服务器,Park01.Park02,配置ssh免密登录 在Park01执行:ssh-keygen 然后一直回车 生成节点的公钥和私钥,生成的文件会自动放在/root/.ssh目录下   然后 ...

  8. (11)ssh免密登录配置

    ***在Linux命令行中登录到另一台虚拟机(需要用到ssh协议) Linux中默认有ssh的服务器端和客户端,客户端的名字就叫ssh 前提是当前使用的用户名在待连接的虚拟机中存在 格式:  ssh ...

  9. linux上ssh免密登录原理及实现

    因为我的服务器集群需要回收日志到中央进行统一处理,所以需要建立ssh互信关系实现免密登录.关于ssh的使用大家可能都很熟悉了,我们今天主要来讲下ssh连接和免密登录的原理. scp 传输文件 scp( ...

随机推荐

  1. 3.CSS字体属性

    CSS Fonts(字体)属性用定义字体系列,大小粗细,和文字样式(如斜体) 3.1字体系列 CSS使用font-family属性定义文本字体系列 p { font-family:'微软雅黑' ;} ...

  2. [Axure教程]0001.新手入门基础

    Axure RP是一个专业的快速原型设计工具.Axure(发音:Ack-sure),代表美国Axure公司:RP则是Rapid Prototyping(快速原型)的缩写.Axure RP已被一些大公司 ...

  3. Javascript函数闭包详解(通俗易懂

    许多书上闭包过于复杂讲解难懂,自己理解了一下并总结啦~ 讲闭包之前,需要先明白以下几个概念. 总之,函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域. 1.执行上下文(executi ...

  4. Unity 游戏框架搭建 2019 (五十二~五十四) 什么是库?&第四章总结&第五章简介

    在上一篇,我们对框架和架构进行了一点探讨.我们在这一篇再接着探讨. 什么是库呢? 来自同一位大神的解释: 库, 插到 既有 架构 中, 补充 特定 功能. 很形象,库就是搞这个的.我们的库最初存在的目 ...

  5. Shell编程案例:修改运维脚本输出效果

    1. 需求:每日运维检查脚本dailymonitor.sh显示对服务器测试结果,其中命令 zabbix_get -s 192.168.111.21 -p 10050 -k "net.tcp. ...

  6. [前端开发]form-data和x-www-form-urlencoded的区别

    在后台开发时,之前做了文件的上传,用的是form-data,但并不知其区别.今天遇到了req.body为空的情况,切换成了x-www-form-urlencoded解决 form-data 就是htt ...

  7. Alpha冲刺——4.30

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.规 ...

  8. Rocket - tilelink - Nodes

    https://mp.weixin.qq.com/s/KJ8pVH76rdxPOZ1vE3QlKA   简单介绍tilelink对Diplomacy Nodes的实现.   ​​   1. TLImp ...

  9. Java实现蓝桥杯算法提高 陶陶摘苹果

    试题 算法提高 陶陶摘苹果 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30 ...

  10. Java实现 LeetCode 455 分发饼干

    455. 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸:并且每块饼干 ...