Este post quedo un poco des actualizado te recomiendo ir directamente a este otro mas nuevo y con una versión mejorada de este código:
https://blog.alvarodeleon.com/generador-de-password-por-consola/
Una de las tareas mas habituales y tediosas de un Administrador de Sistemas es asignar contraseñas seguras, algunos sistemas tienen integrado un generador de contraseña al dar de alta o modificar un usuario aunque otros no.
Estar abriendo una pagina web cada vez que generas una contraseña vuelve a ser molesto, para muchos administadores que siempre tenemos muchas consolas abiertas al mismo tiempo como yo, es fundamental tener un generador de contraseñas por consola, el siguiente script en Python sirve para generar contraseñas seguras:
alvaro@acer:~$ passgen -l 32 -t all KLzX,7)TVxOsVctGXkF1ez8b(20/4Dqf alvaro@acer:~$
Solo tenemos que guardar el script en una archivo por ejemplo en /usr/bin/passgen
Luego ejecutamos
sudo chmod +x /usr/bin/passgen
Con opciones realmente simples, con -l se especifica el largo de la contraseña y con -t el tipo, donde estos pueden ser de tipo “abc” que solo contiene letras o “num” solo numeros, ademas de “anum” que contiene letras y números, y por ultimo “all” que contiene letras, números y caracteres especiales.
#!/usr/bin/python import sys import random # Tipos ABC, NUM, ANUM, ALL class PassGen: length = 8 seed = '' password ='' file = '' quantityChecker = None quantity = 1 def __init__(self,*arguments): self.length = 16 self.setMode('anum') self.quantityChecker= None self.file = None arguments = arguments[0] try : for index in range(1,len(arguments)): if arguments[index] == "-t": self.setMode(arguments[index + 1]) if arguments[index] == "-l": self.setLength(arguments[index + 1]) if arguments[index] == "-f": self.setFile(arguments[index + 1]) if arguments[index] == "-b": self.quantityChecker = True self.quantity = arguments[index + 1] if arguments[index] == "-h": self.showHelp() sys.exit(0) if self.quantityChecker: self.generatePasswordList(self.quantity); else: self.generatePassword(); except Exception: self.showHelp() def generatePassword(self): self.password = '' stop = int(self.length) a = 0 while a < stop: self.password = self.password + str(self.seed[random.randint(0,len(self.seed)-1)]) a = a + 1 if self.quantityChecker: print self.password else: print "\n" + self.password + "\n" if self.file != None: self.__savef(self.file,self.password + "\n",'a') def generatePasswordList(self,quantity): if self.file != None: self.__savef(self.file,"",'w') i = 0 stop = int(quantity) while i < stop: self.generatePassword() i = i + 1 def showHelp(self): print " " print "passgen -t [type] -l [long] -f [file] -b [integer]" print " " print "Option -t is a type " print " " print " Type options: " print " 'abc' for only letters passowrd" print " 'num' for only numbers passowrd" print " 'anum' for generate password with and letters passowrd" print " 'all' for generate password with numbers, letters and special characters" print " " print " For default type is anum" print " " print " Option -l is length passowrd" print " " print " Option -f is path of ouput file" print " " print " Option -b is quantity of password generate at the same time" print " " print " Option -h for help" print " " def __abc(self): self.seed = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', '', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] def __num(self): self.seed = ['0', '1' , '2', '3', '4', '5', '6', '7', '8', '9'] def __anum(self): self.seed = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', '', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1' , '2', '3', '4', '5', '6', '7', '8', '9'] def __all(self): self.seed = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', '', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1' , '2', '3', '4', '5', '6', '7', '8', '9', '!', '"', '#', '$', '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', '{', '|', '}', '~', '@'] def __openf(self,path=''): fo = open(path, "r+") str = fo.read(10); fo.close() return str def __savef(self,path='',content='',mode='w'): fo = open(path, mode) fo.write(content); fo.close() def setMode(self,mode): options = { 'abc': self.__abc, 'num': self.__num, 'anum': self.__anum , 'all': self.__all} options[mode]() def setLength(self,length): self.length = length def setFile(self,file): self.file = file def setQuantity(self,quantity): self.quantity = quantity strpass = PassGen(sys.argv)
Administrador de Sistemas, Programador, Docente y ahora resulta que también Blogger (peor es ser tictoker). Más de 20 años de experiencia en computación atendiendo nabos y resolviendo problemas, los cuales si no fuera por estos nabos, no habrían ocurrido en primer lugar. Escribo más que nada sobre tecnología y herramientas en general, además de algunos artículos con opiniones tan subjetivas como irrelevantes, así que si no te gustan, mejor madura y superalo.