shell脚本配置ssh免密登陆

通过shell脚本配置免密登陆,分为两个脚本,一个是配置文件config.env,一个是正式脚本sshkey.sh。

# config.envexport HOST_USER=(root)
export PASSWD=(a)
export SSH_HOST=(192.168.165.15 192.168.165.16 192.168.165.165)

以上congfig.env文件中,SSH_HOST参数可配置多个IP,可配置不同的用户

sshkey.sh脚本内容大致如下:

  1. 在本地用rsa加密方式生成对应的密钥,并将公钥写入到authorized_keys文件中;
  2. 遍历多台远程服务器,登陆远程服务器生成密钥,并将公钥文件考本到本机,写入本机的authorized_Keys文件中;
  3. 遍历多台远程服务器,将本地的authorized_Keys文件分别分发到各台服务器上。
#!/bin/bash
# sshkey.sh
source config.env

createLocalKey () {
        /usr/bin/expect <<_oo_
        spawn ssh-keygen -t rsa -b 2048 -N "" -f $HOME/.ssh/id_rsa
        expect "Overwrite"
        send "y\r"
        expect eof
_oo_
        cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
}

createRemoteKey () {
        /usr/bin/expect <<_oo_
        spawn ssh [email protected]$ip
        expect {
                        "yes/no" { send "yes\r";exp_continue }
                        "*assword:" { send "$PASSWD\r" }
        }
        sleep 1
        send "ssh-keygen -t rsa -b 2048 -N ‘‘ -f $HOME/.ssh/id_rsa\r"
        expect  {
                        "(y/n)" { send "y\r" }
        }
        sleep 1
        send "exit\r"
        expect eof
_oo_

        /usr/bin/expect <<_oo_
        spawn scp [email protected]$ip:$HOME/.ssh/id_rsa.pub /tmp/id_rsa$ip.pub
        expect {
                        "yes/no" { send "yes\r";exp_continue }
                        "*assword:" { send "$PASSWD\r" }
        }
        expect eof
_oo_

        cat /tmp/id_rsa$ip.pub >> $HOME/.ssh/authorized_keys
        rm -rf /tmp/id_rsa$ip.pub
}

copyToRemote () {
        /usr/bin/expect <<_oo_
        spawn scp $HOME/.ssh/authorized_keys [email protected]$ip:$HOME/.ssh/authorized_keys
        expect {
                        "yes/no" { send "yes\r";exp_continue }
                        "*assword:" { send "$PASSWD\r" }
        }
        expect eof
_oo_
}

pullPubKey () {
        for ip in ${MHA_HOST[@]};do
                if [ $ip == `ifconfig eth0|grep -oP ‘(?<=inet addr:)\S+‘` ];then
                        echo "It‘s local host"
                else
                        createRemoteKey
                fi
        done
}

pushAuthorizedKeys () {
        for ip in ${MHA_HOST[@]};do
                if [ $ip == `ifconfig eth0|grep -oP ‘(?<=inet addr:)\S+‘` ];then
                        echo "It‘s local host"
                else
                        copyToRemote
                fi
        done
}

taskMain () {
        createLocalKey
        pullPubKey
        pushAuthorizedKeys
}

red_echo ()      { [ "$HASTTY" == 0 ] && echo "[email protected]" || echo -e "\033[031;[email protected]\033[0m"; }
green_echo ()    { [ "$HASTTY" == 0 ] && echo "[email protected]" || echo -e "\033[032;[email protected]\033[0m"; }

taskMain; rc=$?
if [ $rc -ne 0 ] ;then
   echo "$(red_echo Config ssh without password failed!)"
else
   echo "$(green_echo Config ssh without password success!)"
fi
exit $rc

如有更好的解决方案,望留言指出,谢谢

原文地址:https://www.cnblogs.com/zx3212/p/9257996.html

时间: 2024-10-09 15:22:14

shell脚本配置ssh免密登陆的相关文章

解决Centos6.4集群配置ssh免密登陆仍然需要输入密码问题

遇到的问题展示:   Ssh免密登陆配置成功之后仍然需要输入密码,找了很多方法,最后已解决,现把解决办法的详细过程记录下来,希望对你有帮助...       解决办法: 一.准备工作 1.安装ssh服务 执行rpm -qa | grep ssh 若无返回ssh服务,则需要执行下列语句进行安装 sudo yum install openssh-clients sudo yum install openssh-server 2.打开本机的ssh配置文件   删除以下内容每行开头的注释"#"

Shell脚本实现SSH免密登录及批量配置管理

本节索引 场景分析 ssh免密登录 pssh工具批量管理 SHELL自动化脚本 本篇总结 场景分析 作为一个运维工程师,不是每个人工作的环境都想阿里.腾讯那样,动不动就上亿的PV量,上万台服务器.我们通常还是工作在,几十台上百台服务器这样的环境,而使用ansible或者puppet这样的自动化运维工具则显得大材小用,并且最终的效果可能还不如几个小工具达到的效果好.像ssh免密登录在配合pssh这样的推送工具,在配合自动化配置脚本,可以说是即方便也使用.这一节将详细带大家以shell脚本的形式实现

ubuntu配置SSH免密码登陆

ubuntu配置SSH免密码登陆 1.安装SSH:  2.是否生成 .ssh 目录: 3.如果没有生成,自己手动创建一个  .ssh 目录: 生成的 .ssh 目录: 4.生成公钥与私钥: 效果如下: 5.将公钥加入到用于认证的公钥文件中: 6.免密码登陆: 效果: Ubuntu 免密码登陆,SSH配置完.

Hadoop用户配置ssh免密登录

一般生产环境 Hadoop组件都是由hadoop用户来启动,首先需要配置hadoop用户ssh免密登录 1.创建Hadoop用户 [[email protected] ~]# useradd hadoop [[email protected] ~]# id hadoop uid=1102(hadoop) gid=1102(hadoop) groups=1102(hadoop) [[email protected] ~]# passwd hadoop Changing password for u

使用rsync基于ssh免密登陆进行备份或目录同步

日常工作中有很多的备份工作,rsync是一个很不错的工具,尝试使用基于ssh免密登陆的方式进行备份,测试成功,是可行且方便的方法,撰文记之,以备后用: 1.A主机root用户对B主机root用户做ssh免密登陆,此过程不再赘述,请自行百度. 2.A主机安装rsync命令:yum install rsync -y 3.在A主机根目录下创建/ceshi目录,B主机根目录下也创建/ceshi目录,并touch一些测试文件. 4.执行命令:rsync -a -e "ssh" 192.168.2

centos7:ssh免密登陆设置及常见错误

目录 一.免密登录设置 二.常见错误 三.CentOS7再ssh-copy-id时的错误 一.免密登录设置 1.使用root用户登录,进入到目录/root/.ssh 2.执行命令:ssh-keygen -t rsa 一路回车,完成后会在目录/root/.ssh下面生成文件 id_rsa和id_rsa.pub 3.将公钥写入文件authorized_keys:cat id_rsa.pub >> authorized_keys 4.重复1.2.3,直到要免密登录的所有机器都生成了id_rsa和id

【Linux】ssh-copy-id三步实现ssh免密登陆

一.本地机器上使用ssh-keygen产生公钥私钥对 ssh-keygen -t rsa -C "[email protected]" --->执行完会在~/.ssh/下生成公钥私钥对 查看公钥私钥对: wucaiyundeMacBook-Pro:~ wucaiyun$ cd ~/.ssh/ wucaiyundeMacBook-Pro:.ssh wucaiyun$ ll total 24 899401 0 drwx------ 5 wucaiyun staff 160 12 18

Linux安装(网络配置+配置hosts+免密登陆+配置环境变量)

网络配置 # 配置ip vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO=static ONBOOT=yes IPADDR=192.168.92.130 #静态ip GATEWAY=192.168.92.2 #网关 NETMASK=255.255.255.0 DNS1=114.114.114.114 # 关闭防火墙 systemctl stop firewalld # 临时关闭防火墙 systemctl disable firewal

ssh免密登陆

ssh无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 系统:CentOS7主机:A(192.168.66.100):B(192.168.66.110)为方面,用户都为root 1.在A下生成公钥/私钥对命令:    ssh-keygen -t rsa -P ''-P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车.它在/root下生成.ssh目录,其他用户的话在对应的家目录下(/home/