Нет необходимости использовать bash-скрипт, просто используйте следующую функцию, которую я использую для других вещей, чтобы сгенерировать теневой зашифрованный пароль:
def shadow(self,password):
SomeZolt="$6$"+''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(9))+"$"
return crypt.crypt(password, SomeZolt)
После чего напишите дополнительные функции в ваш скрипт python который откроет файл / etc / shadow и запишет зашифрованный пароль, который вы получите с помощью этой функции для этого пользователя, таким образом сделав строку вроде:
some_user:!!:15579:0:99999:7:::
make выглядеть так:
some_user:$1$JShdquwdjsd38hSJhdqwdkwd:15579:0:99999:7:::
Таким образом some_user будет иметь назначенный пароль.
Кроме того, вы можете установить пользователя непосредственно в операторе марионетки, изменив его на:
user { $username:
comment => "$email",
home => "/home/$username",
shell => "/bin/bash",
uid => $uid,
gid => $gid,
password => "SomeAlreadyEncryptedPassword",
}
Вы можете использовать указанную функцию, чтобы получить зашифрованный пароль и затем вставить его в оператор.
Спасибо за ваш ответ, я последовал вашему совету и закодировал def для генерации хэша пароля и поместил его в файл / etc / shadow.
Вот сценарий, который я написал, если кого-то может заинтересовать:
class Unix_Account:
def __init__(self, user):
self.user = user
self.password = ''.join(
random.choice(
string.ascii_uppercase + string.ascii_lowercase + string.digits
) for x in range(password_length)
)
self.salt = '$6$'+''.join(
random.choice(string.ascii_uppercase + string.digits
) for x in range(9))+'$'
self.line = self.user+':'+crypt.crypt(self.password, self.salt)+':0:0:99999:7:::'
def change_password(self):
self.result = re.sub(self.user+".*", self.line, file('/etc/shadow', 'r').read())
file('/etc/shadow', 'w').write(self.result)
Затем другой класс отправляет пароль пользователю.
Дата истечения срока действия пароля установлена на 0, так что пользователь вынужден изменить его при первом подключении.
Соединение установлено. по SSH необходимо использовать соответствующий ключ для установки пароля. Пароль используется для команды sudo.
Еще раз спасибо!