加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 一个python脚本的木偶执行,其中os.system(…)命令不起

发布时间:2020-12-13 16:45:36 所属栏目:Linux 来源:网络整理
导读:我试图用puppet管理Unix用户. Puppet提供了足够的工具来创建帐户并提供authorized_keys文件,但是没有设置用户密码,它告诉用户. 我所做的是一个python脚本,它生成一个随机密码并通过电子邮件发送给用户.问题是,用python启动passwd Unix命令是不可能的,然后我
我试图用puppet管理Unix用户. Puppet提供了足够的工具来创建帐户并提供authorized_keys文件,但是没有设置用户密码,它告诉用户.

我所做的是一个python脚本,它生成一个随机密码并通过电子邮件发送给用户.问题是,用python启动passwd Unix命令是不可能的,然后我用命令编写了一个bash脚本:

echo -ne "$passwordn$passwordn" | passwd $user
passwd -e $user

手动启动,脚本运行正常,创建的用户通过电子邮件发送密码.但是当puppet启动它时,只会执行python脚本,就好像os.system(‘/ bin / bash my_bash_script’)被忽略一样.没有显示错误.并且用户获取其密码,但未启动passwd命令.

傀儡是否有任何限制阻止执行我所描述的内容?或者,我如何通过电子邮件更改用户帐户,过期和发送密码?

我可以提供更多信息,但是现在,我不知道哪些是准确的.

非常感谢!

编辑:这是一个具有相同症状的基本代码:

python:setuserpassword.py

#!/usr/bin/python
import os
import sys

user = sys.argv[1]
mail = sys.argv[2]
os.system('/bin/bash /root/tools/setuserpassword.sh '+user+' '+mail)

bash:setuserpassword.sh

#!/bin/bash
# Password setup for the account
password=`pwgen -N1 --secure 10`
echo -ne "$passwordn$passwordn" | passwd $USER > /dev/null 2>&1
[[ $? -ne 0 ]] && exit 2

# Setup the expirancy label to make sure user
# change its password upon fist success login
chage -d0 $USER

# Email sending to inform user of his new password
echo -ne "Hello,$USER;n
The password is:n
$passwordn" | mail -s "$USER account created" $MAIL

这是模块(这方面没问题)

define add_user ( $email,$uid,$gid ) { 

$username = $title

user { $username:
  comment => "$email",home    => "/home/$username",shell   => "/bin/bash",uid     => $uid,gid     => $gid,}   

exec { "/root/tools/setuserpassword.py $username $email":
   path           => "/bin:/usr/bin:/usr/sbin/sbin",refreshonly    => true,subscribe      => user[$username],onlyif         => "cat /etc/shadow | grep $username | grep '!'",require        => Package['pwgen'],}

解决方法

不需要使用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:::

看起来像:

some_user:$1$JShdquwdjsd38hSJhdqwdkwd:15579:0:99999:7:::

因此,some_user将具有指定的密码.

另外,您可以通过将用户更改为以下内容直接在puppet语句中设置用户:

user { $username:
  comment => "$email",password => "SomeAlreadyEncryptedPassword",}

您可以按指定函数的方式使用以获取加密密码,然后将其插入到语句中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读