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 �Cy openssh-clients openssh-server
这里解释一下,一台机器既可以是客户机也可以是服务器,并且这两个角色是可以共存的。openssh-clients的功能类似于XShell,可以作为一个客户端连接上openssh-server。openssh-server的功能主要是作为一个服务(守护进程)运行在后台,如果这个服务开启了,我们就可以用一些远程连接工具来连接centos。由于我是用了Centos6.4的mimimal版本,该版本已经安装了openssh-server,但是却没有安装openssh-clients,所以我只需要安装openssh-clients即可,而具体安装情况请根据自己的系统决定。
第二步:生成密钥,命令如下。
ssh-keygen �Ct rsa �CP ‘' �Cf �C/.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、免密登录原理和实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!