• 建立SSH之免密登陆


    SSH是一种通讯协议,可以实现远程安全登录。可以通过如putty、MobaXterm等工具通过ssh安全登录到虚拟机进行操作。
    Openssh:ssh远程安全登录的开源实现(软件)。
    一、SSH远程登录的原理(基于口令)
    1、客户端向服务器发送远程请求
    如bigdata3登录到bigdata4:

    2、服务器接收到请求后,将自己的主机的公钥发送给客户端,公钥用于加密

    3、客户端将主机发送来的公钥通过hash算法得出主机公钥的公钥指纹,核对公钥指纹是否正确,以确认当前请求连接的的是我们想要登录的主机。
    在bigdata4上查看公钥:ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
    (我的主机用的是ssh的ECC 算法,通过ssh-keygen -t ecdsa生成密钥对。)
    bigdata4上的公钥和bigdata3请求时SHA256是一样的。

    4、核对过公钥后,人机交互界面输入yes,客户端会将服务端的公钥保存在$HOME/.ssh/know_hosts文件中,可通过 cat ~/.ssh/know_hosts文件中查看保存在客户端的公钥。

    5、客户端用服务端的公钥将密码进行加密并发送给服务端

    6、服务端接收到用自己公钥加密的客户端的密码,用在/etc/ssh下对应的私钥进行解密然后对比密码并返回登录结果,私钥用来解密。

    二、ssh的免密码登录(基于密钥)

      Hadoop控制脚本(并非守护进程)依赖SSH来执行针对整个集群的操作。为了支持无缝式工作,安装配置好ssh之后,可以是集群内机器的hdfs用户和yarn用户免密码登录。实现的最简单的方法是创建一个公钥/私钥对,存放到NFS中,让整个集群共享该密钥对。如果home目录并没有通过NFS共享,则需要利用ssh-copy-id等方法共享公钥。
    注意:免密登录也不是万能的。免密登录时值从一台主机A的用户userA,使用userB用户(B主机的一个用户)登录到主机B。存在着严格的对应关系:比如只能用bigdata1的root使用bigdata2的root用户登录到主机bigdata2:root@bigdata1 ====>root@bigdata2。
    实现步骤:
    1、在客户端生成一对密钥(公钥/私钥)
    基于空口令生成一个新的ssh密钥,以实现无密码登录:

    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    1
    参数说明:
    -t 加密算法类型,这里是使用rsa算法
    -P 指定私钥的密码,不需要可以不指定
    -f 指定生成秘钥对保持的位置

    2、将客户端公钥发送个服务端(其他客户端),使用ssh-copy-id

    ssh-copy-id root@bigdata2
    1

    注:经过ssh-copy-id后接收公钥的服务端会把公钥追加到服务端对应用户的$HOME/.ssh/authorized_keys文件中

    3、客户端请求(带有自己的用户名和主机名)

    4、服务端根据客户端的用户名和主机名查找对应的公钥,将一个随机的字符串用该公钥加密后发送给客户端

    5、客户端用自己的私钥进行解密收到的字符串,并将解密后的字符串发送给服务端

    6、服务端对比发送出去的和接收到的字符串是否相同,返回登录结果
    测试:登录成功

  • 相关阅读:
    成为一名优秀程序员所需要知道的那些事
    程序员致富的若干方法探讨
    解决Flex程序在chrome,safari,IE9等浏览器中history的后退与前进问题
    flex4里的状态(state)
    Flex和Flash定时器 setTimeout & setInterval 使用要点
    Flex十种武器(Flex Power Tools: Explorers)
    给你的组件加一个处理事件的属性
    程序员:增加编程经验的另外3种途径
    Flex常用功能代码
    常用Flex IOC框架比较分析
  • 原文地址:https://www.cnblogs.com/xiatian21/p/14940984.html
Copyright © 2020-2023  润新知