zoukankan      html  css  js  c++  java
  • 批量增加Linux系统账号、重置账号密码、FTP账号批量测试

    批量增加Linux系统账号、重置账号密码是用Linux Shell脚本来做的;批量FTP账号测试是用Python脚本来做的。这些脚本都是读取一个用户名和密码文件,然后基于该用户名密码文件进行自动批量测试。

    这些脚本并没有多少技术含量,只是初次写起来需要调试耗费一点时间,希望能给需要的人节省时间,避免不必要的加班 ^_^ 

    用户名密码文件格式如下:

    每一行都是用户名和密码,用户名和密码之间用空格或者TAB制表符分割。

    批量增加系统账号

    #!/bin/bash
    
    cat ./ftp_account.txt | while read line
    do
        if [ "$line" = "" ]
        then
            exit
        fi
        account=`echo $line|awk -F ' '  '{print $1}'`
        password=`echo $line|awk -F ' '  '{print $2}'`
        loginShell=`which nologin`
        useradd $account -s $loginShell -b /home/log/cachelogbak/newlog 
        echo "$account:$password"| chpasswd
    done

    代码工作流程:

    首先循环读取当前目录下一个叫做 ftp_account.txt 的用户名密码文件。每次一行,使用每一行之前先判断是不是空行(或到了最后一行了),然后切分读入的一行,切分为2个元素,第一个元素是用户名,第二个为密码,由于ubuntu和centos的nologin shell路径不同,因此用which找出具体路径,然后用useradd来创建相应用户并设置该账号的home目录和shell,最后调用chpasswd来更改该用户的密码。

    批量重置账号密码

    #!/bin/bash
    
    cat ./ftp_account.txt | while read line
    do
        if [ "$line" = "" ]
        then
            exit
        fi
        account=`echo $line|awk -F ' '  '{print $1}'`
        password=`echo $line|awk -F ' '  '{print $2}'`
        echo "$account:$password"| chpasswd
    done

    代码工作流程:

    其实就是前面第一个脚本的简略版,只不过省略了创建用户账号的那一步,仅仅调用chpasswd来更改密码。

    批量测试FTP账号

    #!/usr/bin/python
    #-*-coding:utf-8 -*-
    
    import os
    import sys
    import time
    import signal
    import datetime
    
    from ftplib import FTP
    
    
    """
    ===ftp_account.txt content===
    user1   passwd1
    user2   passwd2
    user3   passwd3
    """
    
    
    #======================================
    def sigHandle(sig, frame):
        print('
    Python script terminated')
        os._exit(0)
    
    signal.signal(signal.SIGINT, sigHandle)
    #======================================
    
    
    if os.path.exists('./ftp_account.txt'):
        fd = open('./ftp_account.txt', 'r')
    else:
        print "no such file"
        os._exit(-1)
    
    ftp = FTP()
    i = 0
    j = 0
    MAX = 0
    fail_dict = {}
    while 1:
        line = fd.readline()
        if not line:
            break
    
        line = line.strip('
    ').split()
        if len(line) != 2:
            print "wrong file format, break..."
            continue
    
        try:
            print "正在测试 %s" % line[0]
            ftp.connect(host="192.168.1.49", timeout=30)
            ftp.login(line[0], line[1])
            ftp.close()
            i += 1
        except Exception as e:
            if len(line[0]) > MAX:
                MAX = len(line[0])
    
            fail_dict[line[0]] = str(e)
            j += 1
    
    print "成功%d个," % i + "失败%d个" % j
    for each in fail_dict:
        print("失败账号: {0:<%d}," % MAX).format(each) + (" 失败原因: {0:<%d}" % MAX).format(fail_dict[each])
    
    # 如果在Python 2.6上无法使用上面的print代码,请使用下面的代码
    # for each in fail_dict:
    #     print"失败账号: %s," % each + " 失败原因: %s" % fail_dict[each]

    代码工作流程:

    首先判断是否存在ftp_account.txt这个用户名密码文件,不存在则退出。

    然后用Python自带的ftp库ftplib来创建一个ftp对象,并且声明3个计数器,i用于记录成功的账户数,j用来记录失败的账户数,MAX则用于最后的字符串格式化对齐。fail_dict字典则用来详细记录错误的ftp账户和错误原因。

    接下来循环读取 ftp_account.txt 的用户名密码文件。每次一行,使用每一行之前先判断是不是空行(或到了最后一行了),然后切分读入的一行,切分为含2个元素的list列表,第一个元素是用户名,第二个为密码。如果list长度不为2,则说明用户名密码文件格式错误,跳过这错误的一行。然后开始连接指定的ftp服务器192.168.1.49,并设置超时为30秒。如果连接成功,紧接着关闭连接,并增加成功计数;如果失败,则抛出异常,增加失败计数,并将失败的账号和原因记录到fail_dict,同时找出失败账号字符串长度最长的那个值用于后面的格式化对齐。最后打印出成功失败数,以及哪些失败和失败原因。

    sigHandle函数是用来在中途退出上面的脚本时阻止一大堆烦人的输出。

  • 相关阅读:
    [JSOI2007]文本生成器 --- AC自动机 + DP
    [POI2000]病毒 --- AC自动机
    [HNOI2011]数学作业 --- 矩阵优化
    [BZOJ4245][ONTAK2015]OR-XOR(贪心)
    [BZOJ4247]挂饰(DP)
    [BZOJ4032][HEOI2015]最短不公共子串(Trie+DP)
    [BZOJ4028][HEOI2015]公约数数列(分块)
    [BZOJ4027][HEOI2015]兔子与樱花(贪心)
    [BZOJ4004][JLOI2015]装备购买(贪心+线性基)
    [HDU5029]Relief grain(树链剖分+线段树)
  • 原文地址:https://www.cnblogs.com/pluse/p/9105511.html
Copyright © 2011-2022 走看看