【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

!/bin/bash

#date:06-04-2013
hosts=`sed '/^#/d' ~/trusthost/hostlist | awk '{print $1}'`
id=`cat ~/.ssh/id_rsa.pub`
for host in $hosts
do 
   ping -c 2 -W 1 $host
   if [ $? = 0 ]
   then
      passwd=`awk /$host/'{print $2}' ~/trusthost/hostlist`
      sshpass -p "$passwd" ssh $host "echo $id >>~/.ssh/authorized_keys"
    else
      echo "$host is lost" >~/trusthost/ssh.log
    fi
done

使用密钥:

##引用配置文件,全局变量都存放在config文件中
. config
#======================
# function -->Error_log
#定义错误日志存放位置
#======================
Error_log()
{
if [ $? -eq 0 ]
then
    echo "$1 $2 $3" >>$PWDDIR/$okLogfile
else
    echo "$1 $2 $4" >>$PWDDIR/$errLogfile
fi
}
#=================================
#    function  --> Trust
# 创建密钥登录环境
#=============================
Trust()
{
for ip in 15 17
do
##批量创建zhangsan用户并赋予密码和.ssh文件夹
    sshpass -p aixocm ssh [email protected].$ip -o StrictHostKeyChecking=no  "useradd zhangsan && echo aixocm |passwd zhangsan --stdin && mkdir /home/zhangsan/.ssh/"   
    Error_log sshsystem adduser [ok] [error]
##批量拷贝文件分发服务器上zhangsan用户的公钥认证文件给web层服务器
    sshpass -p aixocm scp /home/zhangsan/.ssh/authorized_keys [email protected].$ip:/home/zhangsan/.ssh/authorized_keys
    Error_log sshsystem cpkey [ok] [error]
##由于是使用root用户传送的文件,需要使用root用户修改zhangsan家目录下的.ssh文件夹和公钥认证文件的权限和属主属组
   sshpass -p aixocm ssh [email protected].$ip -o StrictHostKeyChecking=no "chown -R zhangsan:zhangsan /home/zhangsan/.ssh/ && chmod 600 /home/zhangsan/.ssh/authorized_keys" 
    Error_log sshsystem changeprem [ok] [error]
##给web层zhangsan 用户赋予sudo权限便于日常管理,拷贝配置文件前先备份web层服务器上的源文件以便恢复
    sshpass -p aixocm ssh [email protected].$ip -o StrictHostKeyChecking=no mv /etc/sudoers /etc/sudoers.bak
    sshpass -p aixocm scp /etc/sudoers [email protected].$ip:/etc/sudoers 
    Error_log sshsystem addsudo [ok] [error]
done
}
Main()
{
Trust
}
Main;

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

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

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

你可能感兴趣的:(linux,服务器,运维)