简介

qyssh是一个基于ssh证书认证的简单服务器批量管理工具,不支持使用密码登陆的服务器,可以使用qyscp配合qyssh来完成一些脚本的分发与执行工作。

源码

服务器批量管理(qyssh)
#!/bin/bash

#specify default ssh port
PORT=22

#specify default ssh user
USER=root

#specify ssh connecttimeout
Timeout=3

usage()
{
    echo "\
usage: qyssh [-i Path/to/identity ] [-p SSH-Port (default:22)] [-t Connect TimeOut (default:3s)]
             [-u SSH-User (default:root)] [-l Server-List-File] [-c Command ]"
}

kill_ssh_agent()
{
    killall ssh-agent > /dev/null 2>&1
}

while getopts :i:p:u:l:c:t: OPTION
do
    case $OPTION in
    i)
        KEY=$OPTARG
    ;;
    p)
        PORT=$OPTARG
    ;;
    u)
        USER=$OPTARG
    ;;
    l)
        LIST=$OPTARG
    ;;
    c)
        COMMAND=$OPTARG
    ;;
    t)
        Timeout=$OPTARG
    ;;
    ?)
        usage
        exit 1
    ;;
    esac
done

if [ "$KEY"x == "x" ];then
    echo "You must specify a identity with -i option"
    usage
    exit 1
fi

if [ "$LIST"x == "x" ];then
    echo "You must specify a server list file with -l option"
    usage
    exit 1
fi

if [ "$COMMAND"x == "x" ];then
    echo "You must specify a command with -c option"
    usage
    exit 1
fi

kill_ssh_agent
eval `ssh-agent` > /dev/null 2>&1
ssh-add $KEY

server_list=`sed '/^$/d;/^#/d' $LIST`

SSH_COMMAND="ssh -o ConnectTimeout=$Timeout -p $PORT "$USER"@"

for i in $server_list
do
    echo -e "Execute command : \"$COMMAND\" at Host : $i "
    echo "-------------------------------------------------"
    $SSH_COMMAND$i $COMMAND
    case $? in
    0)
        echo -e "executed [ \033[32mOK\033[0m ]!"
    ;;
    ?)
        echo -e "executed [ \033[31mFAILED\033[0m ]!"
    ;;
    esac
    sleep 1
done

kill_ssh_agent
批量文件分发(qyscp)
#!/bin/bash

#specify default ssh port
PORT=22

#specify default ssh user
USER=root

#specify ssh connecttimeout
Timeout=3

usage()
{
    echo "\
usage: qyscp [-i Path/to/identity ] [-p SSH-Port (default:22)] [-t Connect TimeOut (default:3s)]
             [-u SSH-User (default:root)] [-l Server-List-File] FILE TO-PATH"
}

let file=$#-1
TO_PATH=${!#}
FILE=${!file}
unset file

kill_ssh_agent()
{
    killall ssh-agent > /dev/null 2>&1
}

while getopts :i:p:u:l:t: OPTION
do
    case $OPTION in
    i)
        KEY=$OPTARG
    ;;
    p)
        PORT=$OPTARG
    ;;
    u)
        USER=$OPTARG
    ;;
    l)
        LIST=$OPTARG
    ;;
    t)
        Timeout=$OPTARG
    ;;
    ?)
        usage
        exit 1
    ;;
    esac
done

if [ "$KEY"x == "x" ];then
    echo "You must specify a identity with -i option"
    usage
    exit 1
fi

if [ "$LIST"x == "x" ];then
    echo "You must specify a server list file with -l option"
    usage
    exit 1
fi

if [ "$FILE" == "$KEY" -o \
      "$FILE" == "$PORT" -o \
      "$FILE" == "$USER" -o \
      "$FILE" == "$LIST"  -o \
      "$FILE" == "$Timeout" ];then
    usage
    exit 1
fi

kill_ssh_agent
eval `ssh-agent` > /dev/null 2>&1
ssh-add $KEY

server_list=`sed '/^$/d;/^#/d' $LIST`

SCP_COMMAND="scp -o ConnectTimeout=$Timeout -P $PORT $FILE "$USER"@"

for i in $server_list
do
    echo -e "Execute scp : \"$FILE\" to Host : $i:$TO_PATH "
    echo "-------------------------------------------------"
    $SCP_COMMAND$i:$TO_PATH
    case $? in
    0)
        echo -e "[ \033[32mOK\033[0m ]!"
    ;;
    ?)
        echo -e "[ \033[31mFAILED\033[0m ]!"
    ;;
    esac
    sleep 1
done

kill_ssh_agent

安装

将脚本拷贝到/usr/local/sbin并赋予可执行权限即可

使用

qyssh

设置必要的参数

使用该脚本必须通过-i参数指定一个密钥,使用-c参数指定需要执行的命令,使用-l参数指定一个服务器列表文件,一个典型的服务器列表文件如下:

cat /home/yourhome/test_server_list

内容如下:

#team1_server
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
#team2_server
172.16.10.2
172.16.10.3
172.16.10.4
172.16.10.5
172.16.10.6

这个文件可以包含注释。

使用方法

首先请确保你的密钥文件权限为400,以便在命令中指定。

[root@testsbin]# ls -l /home/yourhome/key
-r-------- 1 root root 736 12-31 17:01 /home/yourhome/key

用法: qyssh [-i [证书文件,必须参数] ] [-p ssh端口号 (default:22)][-u ssh用户 (default:root)]

[-l 服务器列表文件 (default:read the database)][-c 执行的命令 ][-t 连接超时时间 (default:3s)]

qyssh -u yourhome -p 60000 -i /home/yourhome/key -l /home/yourhome/test_server_list -c ls
批量获取TCP连接数并排序

使用-c指定批量执行的ssh命令。

qyssh -i /home/yourhome/key -u yourhome -l /home/yourhome/test_server_list -p 60000 -t 10 -c "netstat -nat |awk '{print \$6}'|sort|uniq -c | sort -rn"

注意如果你的命令中包含带$的变量,请使用\避免其替换变量。

上述命令输出的结果如下:

Execute command : "netstat -nat |awk '{print $6}'|sort|uniq -c | sort -rn" at Host : 192.168.1.2
-------------------------------------------------
    282 ESTABLISHED
     26 FIN_WAIT2
     11 TIME_WAIT
      8 LISTEN
      1 Foreign
      1 established)
executed [ OK ]!
Execute command : "netstat -nat |awk '{print $6}'|sort|uniq -c | sort -rn" at Host : 192.168.1.3
-------------------------------------------------
    257 ESTABLISHED
      8 LISTEN
      1 Foreign
      1 established)
executed [ OK ]!
Execute command : "netstat -nat |awk '{print $6}'|sort|uniq -c | sort -rn" at Host : 192.168.1.4
-------------------------------------------------
    260 ESTABLISHED
     14 LISTEN
      1 Foreign
      1 established)
executed [ OK ]!
Execute command : "netstat -nat |awk '{print $6}'|sort|uniq -c | sort -rn" at Host : 192.168.1.5
-------------------------------------------------
   4985 TIME_WAIT
   1939 SYN_RECV
    122 FIN_WAIT1
     54 LAST_ACK
     32 ESTABLISHED
      7 LISTEN
      6 FIN_WAIT2
      5 CLOSING
      1 Foreign
      1 established)
executed [ OK ]!
......etc......

qyscp

首先请确定你的系统装有scp,该工具基于scp。

设置必要的参数

qyssh

使用方法

首先请确保你的密钥文件权限为400,以便在命令中指定。

[root@test sbin]# ls -l /home/yourhome/key
-r-------- 1 root root 736 12-31 17:01 /home/yourhome/key

用法: qyscp [-i [证书文件,必须参数] ] [-p ssh端口号 (default:22)][-t 连接超时时间 (default:3s)]

[-l 服务器列表文件 (default:read the database)][-u ssh用户 (default:root)] [本地文件路径] [拷贝路径]

qyscp -i /home/test/key -l /root/test_server_list -p 60000 ./test.sh /root/

实例

批量添加用户

1、首先编写脚本useradd.sh

#!/bin/bash
user=testuser
useradd $user
mkdir -p /home/$user/.ssh
cat > /home/$user/.ssh/.keys <<EOF
......ssh密钥,此处略.....
EOF
echo "$user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chown $user.$user /home/$user -R

2、使用qyscp分发

qyscp -l /root/test_server_list -p 60000 -i /home/test/key ./useradd.sh ~

3、执行脚本并且在执行完成后删除脚本

qyssh -l /root/test_server_list -p 60000 -i /home/test/key -c "sh ~/useradd.sh && rm -rf ~/useradd.sh"

四月 20th, 2012

Posted In: linux系统

标签:, ,

无觅相关文章插件,快速提升流量