首页 > 系统相关 >shell+expect创建多个节点无密码ssh

shell+expect创建多个节点无密码ssh

时间:2024-11-02 14:44:20浏览次数:6  
标签:node shell send echo expect root ssh

#!/bin/bash
password="liwanliang"
#1.
echo "为每个节点创建公密钥对..."
for node in node{061..065}
do
    echo "${node}开始操作"
    expect -c "
            set timeout 1
            log_user 0
            spawn ssh root@${node}
            expect {
                    \"*yes/no*\" { send \"yes\r\"; exp_continue }
                    \"*password:*\" { send \"${password}\r\"; exp_continue }
            }
            expect \"\#\"
            send \"ssh-keygen -t rsa -f ~/.ssh/id_rsa -P \'\'\r\"
            expect \"\# \"
            send \"exit\r\"
            log_user 1
    "
    echo "${node}操作成功!"
done

#2. 
echo "拷贝所有节点的公钥到本地的一个文件"

for node in node{061..065}
do
    echo "${node}开始操作"
    expect -c "
        log_user 0
        spawn scp root@${node}:/root/.ssh/id_rsa.pub ./${node}.pub
        expect {
            \"*password:\" { send \"${password}\r\"; exp_continue}
        }
        log_user 1
    "
    echo "${node}操作成功"
done

echo "合并公钥文件..."
cat *.pub >> authorized_keys

echo "分发公钥文件..."

for node in node{061..065}
do
    echo "${node}开始操作"
    expect -c "
        log_user 0
        spawn scp ./authorized_keys root@${node}:/root/.ssh/
        expect {
            \"*password:\" { send \"${password}\r\"; exp_continue}
        }
        spawn ssh root@${node}
        expect \"\# \"
        send \"chmod 600 /root/.ssh/authorized_keys\r\"
        expect \"\# \"
        send \"exit\r\"
        log_user 1
    "
    echo "${node}操作成功"
done

echo "修改authorized_keys权限..."
for node in node{062..065}
do
    echo "${node}开始操作"
    ssh ${node} chmod 600 /root/.ssh/authorized_keys
    echo "${node}操作成功"
done


echo "分发ssh_config文件..."

for node in node{062..065}
do
    echo "${node}开始操作"
    scp /etc/ssh/ssh_config root@${node}:/etc/ssh/ssh_config 
    echo "${node}操作成功"
done

echo "删除pub文件"
rm -rf *.pub authorized_keys

当节点需要取消ssh登陆一些提示信息时,修改/etc/ssh/ssh_config,添加

Host *
    SSAPIAuthentication no
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
    LogLevel quiet

上述是让每个节点都创建自己的公私密钥对,属于比较复杂的情况。

如果仅使用同一套,只需要传输.ssh,ssh_config文件就可以了

标签:node,shell,send,echo,expect,root,ssh
From: https://www.cnblogs.com/liwanliangblog/p/18521904

相关文章

  • Windows 基础(一):深入理解Windows,掌握命令行与Shell
    内容预览≧∀≦ゞWindows基础(一)声明导语一、Windows和Linux的区别二、Windows的ShellShell和终端的区别1.命令提示符(CMD)2.WindowsPowerShell3.WindowsTerminal4.WindowsSubsystemforLinux(WSL)三、Windows常用命令1.文件与目录操作2.文本处理3.......
  • 【shell脚本】使用 Shell 脚本比较和同步目录:自动化文件管理的利器
    原创日常运维文档在系统管理中,比较两个目录的内容是一项常见任务,尤其在数据备份和服务器维护时,它显得尤为重要。为此,我们可以使用Shell脚本来简化这个过程,实现自动化。下面将对一个名为compare_files.sh的脚本进行详细介绍,该脚本能够比较目录大小并使用rsync检查内容一......
  • shell脚本之awk的使用
    步骤一:awk的基本用法基本操作方法格式1:awk[选项]'[条件]{指令}'文件格式2:前置指令|awk[选项]'[条件]{指令}'其中print是最常用的编辑指令;若有多条编辑指令,可用分号分隔。Awk过滤数据时支持仅打印某一列,如第2列、第5列等。处理文本时,默认将空格、制表符作为分隔符。......
  • Linux-shell实例手册-网络操作
    本文章讲解的是在linux下跟网络相关的一些操作和命令,喜欢就点赞收藏哦,方便随时查阅!文章目录1Linux下网络基本命令2netstat3ssh4网卡配置文件5route6解决ssh链接慢7ftp上传8nmap9 流量切分线路10snmp1Linux下网络基本命令   rz  #通过ssh上传......
  • SHELL 猜随机数
    猜随机数脚本生成一个100以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,猜小了或猜大了,直至用户猜对脚本结束。#!/bin/bash#RANDOM为系统自带的系统变量,值为0-32767的随机数#使用取余算法将随机数变为1-100的随机数num=$[RANDOM%100+1]#使用read提示用户猜数......
  • SSHD服务
    1.sshd服务1.0故障案例:openssh删除了本地连接物理服务器,通过远程控制卡连接.本地连接云:登录web页面,连接.解决连接后安装openssh,软件包,直接apt/yum安装预防删除之前准备好备用方案.Telnet1.1目标1.修改sshd服务端配置文件修改ssh端口号,......
  • 沨鸾的Shell小技巧
    跟着沨鸾学shell,学到最后只会喵喵喵。正经部分:语法规范:变量要加{}括起来。函数最好加个function关键字。头部一定要有释伴(shebang)。记得写注释,要不然也就上帝能看懂你写的什么了。退出时要有返回状态。能用[[]]就别用[]。尽量用printf代替echo使用以提供更好的兼容性。......
  • Linux sshd升级
    1.ubuntussh升级到9.6sshd_update_ubt#定义变量dir="/etc/xinetd.d/"sshd_pid=`ps-ef|grepsshd|awk'$3==1{print$2}'`#结束sshd进程stop_sshd(){ [-z"${sshd_pid}"]||{ kill${sshd_pid} }}#下载telnetapt_telnet(){apt......
  • ShellScript
    StorageSrvShelScript编写添加用户的脚本,存储在/shells/userAdd.sh目录。当有新员工入职时,管理员运行脚本为其创建公司账号。自动分配客户端账号、公司邮箱、samba目录及权限、网站账号等。以userAddlifei的方式运行脚本,lifei为举例的员工姓名前提条件完成了LDAP服务......
  • shell中的IFS变量与词分割
    引入在bash、zsh、csh等等各种shell实现中,都有一个特殊的内置变量IFS(InternalFieldSeparator),意为内部字段分隔符。IFS变量值是一个字符序列,shell会将IFS字符序列中的各个字符视为词分割(wordsplitting)过程中分隔不同token的边界。正文1.什么是词分割以及什么情......