Hadoop框架起步之图解SSH、免密登录原理和实现方法

1. 前言

emmm….最近学习大数据,需要搭建Hadoop框架,当弄好linux系统之后,第一件事就是SSH免密登录的设置。对于SSH,我觉得使用过linux系统的程序员应该并不陌生。可是吧,用起来简单,真让你说出个所以然,还是件比较困难的事(大佬绕路,此篇文章不属于你~)。然后,我就好奇心大发,打算写一篇博客详细介绍一下SSH和免密登录的原理及实现。

补充:不管是Hadoop的伪分布还是全分布,Hadoop的名称结点(NameNode)都需要启动集群中所有机器的Hadoop守护进程,而这个过程可以通过SSH登录来实现。由于Hadoop并没有提供SSH输入密码登录的形式,因此,为了能够顺利登录每台机器,就需要对其进行SSH的免密登录配置。

2. 初见SSH

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可以在不安全的网络中为网络服务提供安全的传输环境(来自维基百科的定义)。根据其定义,我们能够理解SSH最常见的用途就是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。

早期的互联网通信,例如Telnet和非安全shell,都是采用明文进行传输,一旦被截获,内容就会暴露无遗。而SSH就是其上位的替代品。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为了互联网安全的一个基本解决方案,迅速在全世界获得推广。

这里需要注意一下,SSH只是一种协议(或者可以理解为一种规定),而它具体的实现有很多,商业,开源的等等。其最流行的实现应该是OpenSSH,本文所针对的实现也是基于OpenSSH的。

3. SSH的工作原理

作为以安全性著称的协议,SSH是怎么实现的呢?我们首先想到的肯定是对数据进行加密,而SSH的加密方式主要有两种,一个是对称加密(密钥加密),另一个是非对称加密(公钥加密)。

3.1 对称加密

所谓的对称加密就是客户端与服务器共用一套密钥进行数据的加解密,详情见下图。

图3-1 对称加密的过程

这种加密方式很难被破解,但是存在一个问题,如果密钥泄露,系统数据的安全性将不复存在,为了解决这个问题,非对称加密应运而生。

3.2 非对称加密

非对称加密有两个密钥:公钥和私钥。数据使用公钥加密之后,只能使用私钥进行解密,而私钥被破解的概率很低很低,详情见下图。

图3-2 非对称加密的过程

由于私钥是服务器独有的,所以即使客户机的登录信息被截取,也是没有私钥进行解密的,保证了数据的安全性,充分利用了非对称加密的特点。

3.3 非对称加密的缺陷

非对称加密就一定安全了么?答案是否定的。如果黑客冒充了服务器,拦截了登录请求,并且把自己的公钥发送给客户机,再使用自己的私钥对密码进行解密,就会获取到客户机的登录信息,从而造成数据泄露,这就是中间人攻击,详情见下图。

图3-3 非对称加密的缺陷

对于上诉的缺陷,SSH有两种解决方法,第一种是基于口令的认证;另一种是基于公钥的认证,俗称SSH免密登录。

3.4 基于口令的认证

根据图3-3所示,我们可以发现问题的关键点就在于客户机没法分辨出公钥是否是自己想要登录的服务器给的公钥,所以说客户机只能自己对公钥进行确认,通常第一次登录的时候会出现下面的提示。

1 The authenticity of host 'ssh-server.example.com (12.18.429.21)' can't be established.
2 RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
3 Are you sure you want to continue connecting (yes/no)?

提示的内容是在说,无法确定ssh-server.example.com (12.18.429.21)主机的真实性,但是知道其公钥指纹,是否继续连接。

之所以使用公钥指纹,是因为RSA算法生成的公钥长达1024位,但是通过对公钥进行hash得到的128位的指纹就很容易进行比较。

输入yes之后,会出现下面的提示。

1 Warning: Permanently added 'ssh-server.example.com,12.18.429.21' (RSA) to the list of known hosts.
2 Password: (enter password)

提示在说,该主机已经添加到known hosts的列表里了,接着输入密码,按照图3-2的流程走就行了。

4.基于公钥的认证

4.1 SSH免密登录的原理

免去密码进行登录,不仅使得登录信息不会遭到泄露,而且也简化、方便了系统之间登录的操作,提高了工作的效率,工作原理见下图所示。

图4-1 免密登录的原理

4.2 SSH免密登录的实现(openSSH)

第一步:安装SSH,命令如下。

 yum install –y openssh-clients openssh-server

这里解释一下,一台机器既可以是客户机也可以是服务器,并且这两个角色是可以共存的。openssh-clients的功能类似于XShell,可以作为一个客户端连接上openssh-server。openssh-server的功能主要是作为一个服务(守护进程)运行在后台,如果这个服务开启了,我们就可以用一些远程连接工具来连接centos。由于我是用了Centos6.4的mimimal版本,该版本已经安装了openssh-server,但是却没有安装openssh-clients,所以我只需要安装openssh-clients即可,而具体安装情况请根据自己的系统决定。

第二步:生成密钥,命令如下。

 ssh-keygen –t rsa –P ‘' –f –/.ssh/id_rsa

ssh-keygen是用来生产密钥的工具。-t:指定生成密钥的类型(rsa、dsa、ecdsa等);-P:指定passphrase,用于确保私钥的安全;-f:指定存放密钥的文件(公钥和私钥默认放在相同目录下面,区别是,公钥的文件名有后缀.pub)

第三步:创建用于保存公钥的文件authorized_keys,并且把本机公钥添加到此文件,命令如下。

cat ~/.ssh/id_rsa.pub >> ~./ssh/authorized_keys

第四步:对authorized_keys文件进行授权操作,命令如下。

 chmod 0600 ~/.ssh/authorized_keys

由于每个人使用系统的不同,文件默认的授权也是不相同的,如果不确定的话,可以执行上诉命令,对文件进行授权。

第五步:登录,命令如下。

ssh host

5. 总结和感言

emmm,SSH免密登录的使用还是挺常见的,也挺简单的。我觉得吧,凡事不能知其然而不知其所以然,这是我写这篇博客的目的。同时我也希望读者能够通过这篇博客对SSH以及免密登录能有更好的了解。

这篇博客由于工作的原因,前前后后写了个把星期,真的很不容易,虽然文中的原理很多是通过学习大佬的文章才会的,但是这篇博客中的每个字我都可以负责任的说是我自己一个一个敲的,所有的图都是我自己用processOn画的,如果你有什么问题,可以在博客下留言,我有时间会回复的。

以上所述是小编给大家介绍的Hadoop框架起步之图解SSH、免密登录原理和实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • Linux下实现SSH免密码登录和实现秘钥的管理、分发、部署SHELL脚本分享

    环境: ssh server: 192.168.100.29  server.example.com ssh client: 192.168.100.30  client.example.com 通过root用户建立秘钥认证实现SHELL脚本管理,分发,部署 首先client端创建秘钥对,并将公钥分发给需要登录的SSH服务端 注:公钥相当于锁,私钥相当于钥匙,我们这里相当于在客户端创建一对钥匙和锁,想要做到SSH免密码登录,就相当于我们将锁分发到服务端并装锁,然后客户端就可以利用钥匙开锁. 一.

  • linux远程登录ssh免密码配置方法

    一.情景 公司刚上几台Linux,现在要把主机之间都能远程ssh免密码登陆. 二.原理 很简单,使用ssh-keygen 在主机A上生成private和public密钥,将生成的public密钥拷贝到远程机器主机B上后,就可以使用ssh命令无需密码登录到另外一台机器主机B上. 三.步骤 主机A: 1. 生成公钥和私钥文件id_rsa和id_rsa.pub (敲3下回车即可) [root@bogon ~]# ssh-keygen -t rsa Generating public/private r

  • Hadoop SSH免密码登录以及失败解决方案

    1. 创建ssh-key 这里我们采用rsa方式,使用如下命令: xiaosi@xiaosi:~$ ssh-keygen -t rsa -f ~/.ssh/id_rsa Generating public/private rsa key pair. Created directory '/home/xiaosi/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identifi

  • CentOS 6.5中SSH免密码登录配置教程

    0.说明 这里为了方便说明问题,假设有A和B两台安装了centos6.5的主机.目标是实现A.B两台主机分别能够通过ssh免密码登录到对方主机.不同主机的配置过程一样,这里介绍A主机的配置过程. 事先在AB主机分别创建好要免密码登录的用户名,在/etc/hosts文件增加主机名和ip. 创建新用户:useradd linuxidc 设置密码:passwd linuxidc,输入自己想要的密码即可,之后su linuxidc切换用户 修改主机名:vim /etc/sysconfig/network

  • Redhat 7/CentOS 7 SSH 免密登录的方法

    先决条件 3 台 CentOS 7 HOSTNAME IP ROLE server1 10.8.26.197 Master server2 10.8.26.196 Slave1 server3 10.8.26.195 Slave2 步骤 1. 用 root 用户登录.每台服务器都生成公钥,再合并到 authorized_keys. 2. CentOS 默认没有启动 ssh 无密登录,去掉 /etc/ssh/sshd_config 其中 2 行的注释,每台服务器都要设置. RSAAuthentic

  • centos配置ssh免密码登录后仍要输入密码的解决方法

    前言 在搭建Linux集群服务的时候,主服务器需要启动从服务器的服务,如果通过手动启动,集群内服务器几台还好,要是像阿里1000台的云梯Hadoop集群的话,轨迹启动一次集群就得几个工程师一两天时间,是不是很恐怖.如果使用免密登录,主服务器就能通过程序执行启动脚步,自动帮我们将从服务器的应用启动.而这一切就是建立在ssh服务的免密码登录之上的.所以要学习集群部署,就必须了解linux的免密码登录. 第一步:在本机中创建秘钥 1.执行命令: ssh-keygen -t rsa -C "xx@qq.

  • 详解SSH如何配置key免密码登录

    如何使用 直接指定ip然后-i 指定key文件,然后指定用户 ssh 1.1.1.1 -i Test1 -l userxxx 不指定用户实际上就是使用当前的本机登陆的用户名去登陆远端主机,比如本地用户是AAA,那么: ssh 1.1.1.1 -i Test1 等同于 ssh 1.1.1.1 -i Test1 -l AAA 这里要注意,生成的key是和一对用户绑定的,生成key的用户以及存储这个key的公钥的远端主机的用户.ssh的原理就是,公钥给人家,自己留秘钥,远端主机的其他用户也是无法看到这

  • ubuntu16.04服务器配置ssh免密码登录

    在客户端操作 ssh-keygen -t rsa 文件位置写/home/try/.ssh/server_rsa,不使用默认值,我命名为server_rsa担心影响到git的key(因为我的git使用的是默认值) ssh-copy-id root@123.45.56.78(你的服务器ip), 或这使用 cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >> ~/.ssh/autho

  • Ubuntu下如何设置ssh免密码登录安装

    1.首先在本机安装openssh-server和openssh-client. 命令:sudo apt-get install openssh-server openssh-client 2.在检查当前的目录下有没有.ssh这个文件,没有的话就mkdir下. 3.生成公钥与私钥.命令:ssh-keygen -t rsa 4.将.ssh文件中的id_isa_pub复制到其他机器的authorized_keys下.并修改authorized_keys权限为600. 5.ssh nodeXX即可

  • Linux使用ssh公钥实现免密码登录实例

    ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 有机器A(192.168.1.155),B(192.168.1.181).现想A通过ssh免密码登录到B. 首先以root账户登陆为例. 1.在A机下生成公钥/私钥对. [root@A ~]# ssh-keygen -t rsa -P '' -P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车. 该命令将在/root/.ssh目录下面

随机推荐