• 【Linux】Linux批量建立主机信任关系


    ssh,即Secure Shell,它是把所有传输的数据都进行了加密。它有两个版本,即1.x和2.x,其中只有Open SSh是免费的。从客户端来看,ssh有两种级别的安全验证,一是口令验证(只要你知道账户和密码,就能登录,并且所传输的数据都是加密的),二是密匙验证(自己为自己创建一对密匙,然后把公用密匙放到服务器上;如果你连接服务器的时候,客户端首先发送一个请求,里面包括公用密匙,请求服务器进行验证;服务器接收到请求之后,就会在自己的家目录下寻找你的密匙,与你发送过来的密匙进行比较,如果相同,服务器就会把自己的“质询”信息进行加密,发送给客户端;客户端接收到“质询”信息之后,就会用自己的私人密匙进行解密,然后把它发送给服务器)。

    将客户机和服务器设置为互相信任关系,步骤如下:

    (1)生成密匙

    a)使用ssh-keygen -t rsa命令分别在客户机和服务器上生成一对密匙;

    (2)分发公用密匙

    a)将(1)中生成的公开密匙分别拷贝到对方的机器上,放到~/.ssh/目录下,文件名为authorized_keys,注意:此文件的权限必须为644.

    问题:关于authorized_keys文件权限,许多网上的资料都说必须是600的权限才能够成功建立起信任关系,但是在我调试的时候,并不是这样的啊。我测试了644和600的权限,这两个的权限都是可以建立起信任关系的,只有当其拥有执行权限的时候,是不可以正确建立起信任关系的。

    (3)配置ssh

    a) 修改/etc/ssh/sshd_config文件,将如下前三行的注释去掉。

    1.实现环境:

    本机redhat6.3 32位的操作系统

    2.实现目的:

    对其他主机做信任,使本机登录其他主机不需要输入密码

    3.实现过程:

    1)先在本机用ssh-keygen -t rsa生成公钥,生成~/.ssh/id_rsa.pub公钥文件

     2)

    软件工具: sshpass,

    使用root用户批量创建ssh信任关系:

    从一台文件服务器上获取软件资源,活着scp传输到另外的主机上:

    分发服务器上安装 sshpass软件工具  ftp://182.254.217.108/pub/soft/

    解压文件,,进入解压后的文件夹

      ./configure   

     make && make install

    安装好sshpass工具后,编写trust.sh 建立信任关系,这个脚本只要root用户执行过一次就可以不再执行了

      3)把 StrictHostKeyChecking no加到/etc/ssh/ssh_config可以让ssh客户端自动接受新主机的hostkey,不用每次在ssh新主机时都自己输入yes   

     4)编写hostlist文件,里面列举了主机名(ip地址)和主机密码(主机名和密码之间用空格隔开),一行内只有一对主机名和密码 

    使用主机名密码下发:

      5)执行批量建立主机信任关系的脚本trusthost.sh

    1. !/bin/bash
    2. #date:06-04-2013
    3. hosts=`sed '/^#/d' ~/trusthost/hostlist | awk '{print $1}'`
    4. id=`cat ~/.ssh/id_rsa.pub`
    5. for host in $hosts
    6. do
    7. ping -c 2 -W 1 $host
    8. if [ $? = 0 ]
    9. then
    10. passwd=`awk /$host/'{print $2}' ~/trusthost/hostlist`
    11. sshpass -p "$passwd" ssh $host "echo $id >>~/.ssh/authorized_keys"
    12. else
    13. echo "$host is lost" >~/trusthost/ssh.log
    14. fi
    15. done

    使用密钥:

    1. ##引用配置文件,全局变量都存放在config文件中
    2. . config
    3. #======================
    4. # function -->Error_log
    5. #定义错误日志存放位置
    6. #======================
    7. Error_log()
    8. {
    9. if [ $? -eq 0 ]
    10. then
    11. echo "$1 $2 $3" >>$PWDDIR/$okLogfile
    12. else
    13. echo "$1 $2 $4" >>$PWDDIR/$errLogfile
    14. fi
    15. }
    16. #=================================
    17. # function --> Trust
    18. # 创建密钥登录环境
    19. #=============================
    20. Trust()
    21. {
    22. for ip in 15 17
    23. do
    24. ##批量创建zhangsan用户并赋予密码和.ssh文件夹
    25. sshpass -p aixocm ssh root@10.0.7.$ip -o StrictHostKeyChecking=no "useradd zhangsan && echo aixocm |passwd zhangsan --stdin && mkdir /home/zhangsan/.ssh/"
    26. Error_log sshsystem adduser [ok] [error]
    27. ##批量拷贝文件分发服务器上zhangsan用户的公钥认证文件给web层服务器
    28. sshpass -p aixocm scp /home/zhangsan/.ssh/authorized_keys root@10.0.7.$ip:/home/zhangsan/.ssh/authorized_keys
    29. Error_log sshsystem cpkey [ok] [error]
    30. ##由于是使用root用户传送的文件,需要使用root用户修改zhangsan家目录下的.ssh文件夹和公钥认证文件的权限和属主属组
    31. sshpass -p aixocm ssh root@10.0.7.$ip -o StrictHostKeyChecking=no "chown -R zhangsan:zhangsan /home/zhangsan/.ssh/ && chmod 600 /home/zhangsan/.ssh/authorized_keys"
    32. Error_log sshsystem changeprem [ok] [error]
    33. ##给web层zhangsan 用户赋予sudo权限便于日常管理,拷贝配置文件前先备份web层服务器上的源文件以便恢复
    34. sshpass -p aixocm ssh root@10.0.7.$ip -o StrictHostKeyChecking=no mv /etc/sudoers /etc/sudoers.bak
    35. sshpass -p aixocm scp /etc/sudoers root@10.0.7.$ip:/etc/sudoers
    36. Error_log sshsystem addsudo [ok] [error]
    37. done
    38. }
    39. Main()
    40. {
    41. Trust
    42. }
    43. Main;

    https://my.oschina.net/u/1449160/blog/199771

    https://www.cnblogs.com/cmlinux/p/5712606.html

    ssh的信任关系的建立及原理 - 算法网

  • 相关阅读:
    vue+elementUI el-select 自定义搜索逻辑(filter-method)
    HRnet
    基于海鸥算法的无人机航迹规划-附代码
    Java完全自学手册,从外包到大厂,再到年薪100万都靠它
    泛微OA——ecology 9建立自定义Java接口并部署到对应节点
    【数据库系统概论】期中作业
    vs2022 编译遇见编译器堆空间不足,解决办法(针对CMAKE工程)
    前后端跨域
    gcc 编译标准
    JAVA多线程并发(一):线程的创建
  • 原文地址:https://blog.csdn.net/qq_35789269/article/details/133324814