zoukankan      html  css  js  c++  java
  • 互信

    SSH互信



    前言

    单向互信和双向互信大致流程:

    本机到其他节点免密码:本机生成私钥和公钥 -> 将公钥复制并改名为authorized_keys -> 将authorized_keys拷贝到其他节点

    所有节点间互相免密码:本机生成私钥和公钥 -> 将公钥复制并改名为authorized_keys -> 将~/.ssh目录拷贝到其他节点并覆盖

    互信和ssh详细原理可参考此文章 https://www.jellythink.com/archives/555

    主机互信和用户互信区别:

    1. 主机互信是动/etc/ssh目录,用户互信是动~/.ssh文件
    2. 主机互信后,后面创建的新用户都可以直接免密登录;用户互信则需要每个用户单独设置.ssh。
    3. 第二点看得出来主机互信在集群管理上方便很多,不过主机互信可能会遇到ssh版本bug问题,安全隐患比用户互信大。

    主机互信和用户互信对比小结:

    1. 集群管理中还是建议用户互信。
    2. 集群管理中新建用户的互信有脚本可以实现,其实也不比主机互信麻烦多少。

    一、基于用户的互信

    1.1、添加linux的用户互信

    说明:想用哪个用户免密,就用哪个用户登录到master主节点执行,比如本文是让节点间root用户之间免密。

    # 1.主机生成key
    ssh-keygen -t rsa -C wufeng10130@163.com
    # 2.重命名key文件
    cd ~/.ssh
    cp id_rsa.pub authorized_keys
    # 3.(可选)如果为非高性能的环境,建议不进行此配置,此配置会忽略ssh主机key检查(就是忽略yes/on询问)
    echo 'StrictHostKeyChecking no' > ~/.ssh/config
    # 4.(可选)对ssh做一些优化,包括防止特定网络环境下连接断开、压缩数据、多通道、加快ssh连接等选项
    echo 'TCPKeepAlive=yes' >> ~/.ssh/config
    echo 'ServerAliveInterval=15' >> ~/.ssh/config
    echo 'ServerAliveCountMax=6' >> ~/.ssh/config
    echo 'Compression=yes' >> ~/.ssh/config
    echo 'ControlMaster auto' >> ~/.ssh/config
    echo 'ControlPath /tmp/%r@%h:%p' >> ~/.ssh/config
    echo 'ControlPersist yes' >> ~/.ssh/config
    # 5.赋予权限
    chmod 644 ~/.ssh/authorized_keys ~/.ssh/config
    # 6.将授权文件拷贝到其余节点
    scp -rp ~/.ssh mgt02:/root
    # 7.输入密码,完成文件远程拷贝
    

    1.2、添加windows的用户互信

    说明:此方式是把windows中生成的秘钥拷贝到Linux中,windows生成秘钥需要借助xshellsecureCrt等工具。

    xshell为例:

    1)

    2)

    3)

    4)

    5)

    6)在Linux中创建.ssh目录并设置权限
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh

    7)将公钥追加到~/.ssh目录下的authorized_keys文件中

    windows

    2 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyD6Gbu6M/y2N8NvqOLMRrVbssDnBvZhvjbf7vOvQwppZEjYlW+bOL6KxCTk/bT2/sP0/KL/119X6MyPL5x1sAvU0oCuChmImU6KHtXRsHpYHk0yYu8S3ucKayHaTZk6aLPgrax45IBFUKbntDI5g/hel5v1byubGhe24olyIL9rpkPJ4q9D1V/wi9KhFiDorB82t/PCdmQIY6wLwYIUL2LGvyENbwGrN31N9p3hhK/1+47ptcJ9w2Wlj7o26/n/JNJG0UdkYmcLAYSOTkqHNF9epcdNAWwfRrga2s9idfe+MvlkZpqiCGSc0ZeJqaEH5uRLmjJUPr0/19YlYqNj6/Q==

    8)xshell登录设置


    1.3、删除用户互信

    1.删除~/.ssh/known_hosts中对应的主机信息

    2.删除~/.ssh/authorized_keys中对应的主机信息


    二、基于主机的互信

    2.1 添加主机互信

    说明:到master主节点执行以下脚本

    #!/bin/bash
    #add for ssh
    #
    echo "HostbasedAuthentication yes" >> /etc/ssh/ssh_config
    echo "EnableSSHKeysign yes" >> /etc/ssh/ssh_config
    echo "HostbasedAuthentication yes" >> /etc/ssh/sshd_config
    #(可选)高性能计算集群需要,用来取消yes/on交互式应答,好像只有centos7需要加,centos6不加
    echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config
    cat /etc/hosts|grep -v -E "^#|localhost"|awk '{print $2","$1}'> /etc/ssh/hostlist 
    cat /etc/hosts|grep -v -E "^#|localhost"|awk '{print $2}' > /etc/ssh/shosts.equiv
    
    ssh-keyscan -t rsa -f hostlist  > /etc/ssh/ssh_known_hosts
    
    /etc/init.d/sshd restart
    

    /etc/ssh/hostlist内容如图:

    /etc/ssh/shosts.equiv内容如图:

    最后将ssh_config、sshd_config、shosts.equiv、hostlist、公钥、私钥、ssh_known_hosts同步至所有节点的/etc/ssh/目录中,并重启客户节点的sshd 服务;(不能将整个/etc/ssh目录拷过去!!)

    cd /etc/ssh
    scp -r ssh_config sshd_config shosts.equiv hostlist ssh_known_hosts ssh*.pub ssh*key caegns07:/etc/ssh/
    

    结语

    感谢您花费时间阅读这篇教程,如果喜欢可以帮忙转发或收藏!祝您在这里记录、阅读、分享愉快!

    作者 @cyrus0w
    2021 年 1月 30日

  • 相关阅读:
    spring自定义标签
    shell脚本实战
    redis使用场景
    了解并安装Nginx
    查看jar包依赖树
    从一道索引数据结构面试题看B树、B+树
    11条sql技巧
    or/in/union与索引优化
    动态规划
    实现快速迭代的引擎设计
  • 原文地址:https://www.cnblogs.com/cyrus0w/p/13224334.html
Copyright © 2011-2022 走看看