菜鸟笔记
提升您的技术认知

ssh command一台主机同时给多台主机远程操作-ag真人游戏

机器列表: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 "$@"
        done
    return 0
}
if [ $# -lt 1 ]
then
    echo "$0 cmd"
    exit
fi
paserargs "$@"
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'
网站地图