SSH对于大多程序员都不陌生,目前主流的云服务提供上也是通过SSH来提供链接的安全保障,比如AWS通过使用下载的私钥(private key)实现与EC2实例安全连接、GitHub通过上传的公钥(public key)实现基于git协议(底层使用SSH)远程库管理。

SSH(Secure Shell)是一个提供数据通信安全、远程登录、远程指令执行等功能的安全网络协议,由芬兰赫尔辛基大学研究员Tatu Ylönen,于1995年提出,其目的是用于替代非安全的Telnet、rsh、rexec等远程Shell协议。之后SSH发展了两个大版本SSH-1和SSH-2。

从客户端来看,SSH提供两种级别的安全验证。

第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。

有关详细的介绍,可以参考wiki:https://en.wikipedia.org/wiki/Secure_Shell

我们这里需要对第二种进行配置。

1. 免秘钥

创建hadoop用户和用户组,
节点名称 IP1 IP2 备注
node1.com 192.168.122.128 动态联网 root/123456  hadoop/hadoop
node2.com 192.168.122.129 动态联网 root/123456  hadoop/hadoop
node3.com 192.168.122.130 动态联网 root/123456  hadoop/hadoop


使用hadoop用户,命令如下

ssh-keygen -t rsa  生成rsa加密的密钥



cp id_rsa.pub authorized_keys             copy文件

cat id_rsa.pub>>authorized_keys 将其他的秘钥追加到这一个文件中,然后分发给所有机器

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxOUxs3C8xul4iqadE5nfEG8+9lURvGk8o7Z1Ef1cZ3PJBXPPi7/zNUxiL2iD93SMHMwmN6ZaUy9myLCPmyA1oCpOyjzyBQQv0ONk2QkWNytvYaF4KQx3OjF3L1o/YwAbppMzuofX+iBT36IYeRuF/86w6VwRtfCQ/8s6+h84RCAwhdLtopksrtY3v/03UMFaZ1F/GTmQeralSQWuhSbLXgYEhqoPr+AhI/B04PvJA3Q1HTxKMKqll3GmzmvGxhWWpYmKDAJvgnJ5C3jpUMl7NSVMbz0mwzdqk8ao+lt1KYoyl9mwbbs0Al57MyfgftZdttnK1wsVAYnKlFyYJZinGw== hadoop@node1.com
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzABdw8P91Ohgobpacj/OpTtt4WHdJrzVQPalUMAZUHoLZSfqtfqSVljpMhD8NmxYh2rHGLivA/pyLIrqEbTshkIyu1vlEDARry5cH02zv5xRQy1/npcLkdKOQbMvecbIO+wginFnedPBTs3Xw0J2XZZJf6G9ySLe2WQt4JW31QordOjfO2ZhQFYHB7icu22ReLB2unBfK9oyc2F+pbTENpe5/Ka5s0qMcX1d0XyVWqUo5F6cnrX/JoQ8xveO+DXJxGMvOZHQJPkfID8KT4mbZ7/kfo5ap9UH5AO4H6Sx9o8pMvZOid0m0kfdmiJ1PgS5kQiJxD1ITSQ7WNCglNTbWQ== hadoop@node2.com
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6jde660wUazvvRmld6eTD0gFpxIUMvn6eBv8KftjSPfN5KYRq3CugcAUyghq5GRkIyikbLugTzm2WiR3fAZEqZtDtGZk/s+CsryOfwrgrpyWsjU1ZScuKJtKXuo3ZlNB4FrpvxM1xJMd5A2lN3EDDi0JbkyDTajrEQb4+hNwQR+wv11EnjmPAPEJ5FCgM7JfyNC1hqzuht1MwCPyLNekwIuB+hgQaOh81WSY/U52DfKsvDQc0LeEaXxuEfSCFQYjY9VGDO92sHe0dUkGdmjxFiEd5JRObxnQQTMn9rHEcT9iTjruzAi811d3ropvkaGad4JjuJ49LCmmm/WcsmZlEw== hadoop@node3.com


这样所有的机器都有一份授权的key,每一个机器访问的时候保证这台机器上的authorized_keys 里面有访问者的pub key,通过验证。

接下来配置所有的hosts文件
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.122.128 node1.com
192.168.122.169 node2.com
192.168.122.130 node3.com

使用ssh测试,如果失败:

情况1: authorized_keys 权限过高:

chmod 600 authorized_keys

情况2: sshd_config


配置成功之后:

Charles 于2015-12-17 Phnom Penh



版权说明:
本文由Charles Dong原创,本人支持开源以及免费有益的传播,反对商业化谋利。
CSDN博客:http://blog.csdn.net/mrcharles
个人站:http://blog.xingbod.cn
EMAIL:charles@xingbod.cn

最新文章

  1. maven学习(一)
  2. 装b指南
  3. Linux 系统常用命令汇总(一) 文件和目录操作
  4. TestNG之参数化
  5. jQuery时间轴插件:jQuery Timelinr
  6. Vivado Launching SDK "Importing Hardware Specification" error的解决方法
  7. 一个简单的Hibernate工具类HibernateUtil
  8. 『重构--改善既有代码的设计』读书笔记----Introduce Foreign Method
  9. Scala 编程(一)Scala 编程总览
  10. Web Service-- 使用 JDK 发布 WS
  11. Unhandled event loop exception No more handles
  12. rt-thread平台 动态装载实现原理
  13. python操作三大主流数据库(1)python操作mysql①windows环境中安装python操作mysql数据库的MySQLdb模块mysql-client
  14. 2. ELK 之kibana 简介、获取、安装
  15. net 反射30分钟速成
  16. bzoj千题计划139:bzoj2229: [Zjoi2011]最小割
  17. java序列化报错
  18. .net爬虫了解一下
  19. OSGI
  20. 【转】C#中HttpWebRequest的GetRequestStream执行的效率太低,甚至偶尔死掉

热门文章

  1. hibernate学习(3)
  2. OSGi类加载问题
  3. VS不显示引用的几种情况
  4. Sublime2 + SASS + Koala 测试
  5. LeetCode OJ:Summary Ranges(概括区间)
  6. middle school
  7. MPEG4、XVID、AVC有什么区别
  8. msyql中myism和innodb的区别
  9. Tomcat 工作原理 1 (转)
  10. [转]css讲解 font-weight:bold和bolder区别