欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ssh command一台主机同时给多台主机远程操作

程序员文章站 2022-06-07 15:49:57
...

机器列表:host0,host1, host2,host3,host4,host5

实现功能:在host0上面对其他机器执行指令
1、实现host0可以免密码登录host1-host5,这个可以自行百度
2、在host0的home目录下新建文件.scmd.sh如下:

#!/bin/sh

paserArgs()
{
    OLD_IFS="$IFS"
    IFS=","
    arr=($1)
    IFS="$OLD_IFS"
    hosts=()

    for s in ${arr[@]}
    do
        if [[ $s =~ "-" ]]
        then
        IFS="-"
        arr1=($s)
        IFS="$OLD_IFS"
        if [ ${#arr1[@]} == 2 ]; then
            prix0=`echo ${arr1[0]} | grep '.*[a-zA-Z]' -o`
            end0=`echo ${arr1[0]} | grep '[0-9]*$' -o`
            prix1=`echo ${arr1[1]} | grep '.*[a-zA-Z]' -o`
            end1=`echo ${arr1[1]} | grep '[0-9]*$' -o`

            if [ $end0 -lt $end1 ]; then
               max=$end1
               min=$end0
            else
                max=$end0
                min=$end1
            fi
            for i in `seq ${min} ${max}`
            do
                hosts+=($prix0${i})
            done
        fi
        else
            hosts+=($s)
        fi
    done
}

doCommand()
{
    for host in ${hosts[@]}
        do
            echo ""
            echo HOST $host
            ssh $host "[email protected]"
        done
    return 0
}

if [ $# -lt 1 ]
then
    echo "$0 cmd"
    exit
fi
paserArgs "[email protected]"
doCommand "$2"
echo "return from scmd"

3、在host0的home目录下的.bashrc文件加入如下代码

alias scmd="sh ~/.scmd.sh" 

4、source是的.bashrc生效

[work@host0 ~]$source .bashrc

5、所有东西都配置好,大功告成!下面就是测试:scmd命令接收两个参数,第一个是机器名,第二个是操作的命令。这里第一个参数机器列表可以是连续的或者混合型,什么意思看下面

###host1 上执行'ls ~',列出host1的home文件
[work@host0 ~]$scmd host1 'ls ~'

###host1 和host2上执行
[work@host0 ~]$scmd host1,host2 'ls ~'

###host1、host2、host3和host5上执行
[work@host0 ~]$scmd host1-host3,host5 'ls ~'

###host1、host2、host4和host5上执行,创建文件夹test
[work@host0 ~]$scmd host1-host2,host4-host5 'mkdir ~/test'
相关标签: command