zoukankan      html  css  js  c++  java
  • SSH 多台VM之间无密码登录

    1. What is SSH?

    SSH 为 Secure Shell 的缩写,SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
     
    2. Why?
    传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道"。
     
    3. SSH基本原理
    第一种级别(基于口令的安全验证)
    只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
    (1)远程主机收到用户的登录请求,把自己的公钥发给用户。
    (2)用户使用这个公钥,将登录密码加密后,发送回来。
    (3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
     
    第二种级别(基于密匙的安全验证)
    需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
    用这种方式,你必须知道自己密匙的口令。
    与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。
     
    4. 多台linux VM 之间无密码登录(第二种级别
    Master要实现无密码公钥认证,连接到Salve上,
    (1)首先在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。
    (2)当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。
    (3)Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。
     
    5. Hadoop Master-Slave之间SSH无密码登录设置过程:
    -1.
    root 权限修改 /etc/ssh/sshd_config,保证下面三行没有被注释
    RSAAuthentication yes                       # 启用 RSA 认证
    PubkeyAuthentication yes                    # 启用公钥私钥配对认证方式
    AuthorizedKeysFile %h/.ssh/authorized_keys  # 公钥文件路径
    -2.
    重启,service sshd restart
    -3.
    ssh-keygen –t rsa –P ''
    运行后直接回车采用默认路径。生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在"/home/用户名/.ssh"目录下。 
    -4.
    Master节点上把id_rsa.pub追加到授权的key里面
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    至此,本机普通用户可以无密码登录
    -5.
    ~/.ssh里面,把公钥复制所有Slave机器上
    ssh-copy-id hadoop@Slave1.Hadoop
    ssh-copy-id hadoop@Slave2.Hadoop
    这个命令的作用就是把当前机器的公钥追加到slave的authorized_keys里面;
    效果跟scp复制到slave,然后cat 追加是一样的。
    -6.
    至此,Master账号可以ssh无密码登录到Slave
    ssh hadoop@Slave1.Hadoop
    -7.
    如果登录不上,重启再试
    -8.
    从Slave无密码登录到Master,和Master无密码登录所有Slave原理一样,就是把Slave的公钥追加(>>)到Master的".ssh"文件夹下的"authorized_keys"中。
    在Slave上root重复 1-4
    用scp把id_rsa.pub复制到Master上,如下
    slave1上面
    scp id_rsa.pub hadoop@Master.Hadoop:~/.ssh/slave_pub_key/s1
    slave2上面
    scp id_rsa.pub hadoop@Master.Hadoop:~/.ssh/slave_pub_key/s2
    然后到Master上面,将s1,s2追加到Master的authorized_keys
     
    [hadoop@Master .ssh]$ cat slave_pub_key/s1 >> authorized_keys
    [hadoop@Master .ssh]$ cat slave_pub_key/s2 >> authorized_keys
     
    -9.
    Done.
     
     
     
     





  • 相关阅读:
    制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统
    微信小程序学习
    linux 驱动 printk 输出变量格式
    linux驱动- PCI-E设备驱动-PCIE设备结构体
    ubuntu 14.04 root登录
    Linux 应用程序 网络通讯函数记录
    linux 驱动学习 GPIO驱动相关函数详解
    linux 驱动学习 内核头文件 interrupt.h
    linux 驱动学习 常用头文件 cdev.h
    2020.11.10 1课 c++1 内联函数inline,引用对变量取别名,函数重载,缺省
  • 原文地址:https://www.cnblogs.com/ECNB/p/4664469.html
Copyright © 2011-2022 走看看