python - 添加用户的bash脚本
问题描述
我编写了连接到 Linux 服务器的 python 脚本并运行了一个 bash 脚本来创建用户和密码。密码未设置,我不知道为什么,我认为来自 python 的随机密码不会将值发送到 bash 脚本,但是如果在 bash 脚本中我使用密码值创建目录!
蟒蛇脚本:
import boto3
import botocore
import paramiko
import string
import secrets
def add_user(username, subfolder):
key = paramiko.RSAKey.from_private_key_file("x.x.x")
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(8))
cmd = "add_user %s %s %s" % (username, subfolder, password)
# Connect/ssh to an instance
try:
# Here 'test' is user name and 'instance_ip' is public IP of EC2
client.connect(hostname="x.x.x.x", username="test", pkey=key)
# Execute a command(cmd) after connecting/ssh to an instance
#stdin, stdout, stderr = client.exec_command(f"add_user {username} {subfolder} {password}")
stdin, stdout, stderr = client.exec_command(cmd)
print (cmd)
print (password)
client.close()
except:
print ("Something wrong")
add_user('test29', '12asd3')
bash 脚本:
#!/bin/bash
USERNAME=$1
SUBFOLDER=$2
PASSWORD=$3
sudo useradd -d /home/FTPserver/$USERNAME/ -m $USERNAME
sudo mkdir -p /home/FTPserver/$USERNAME/$SUBFOLDER
sudo chown -R $USERNAME:$USERNAME /home/FTPserver/$USERNAME/$SUBFOLDER
sudo echo -e "${PASSWORD}\n${PASSWORD}" | passwd $USERNAME
sudo echo $PASSWORD
解决方案
passwd
不是适合这项工作的工具,您可以chpasswd
改用。来自man chpasswd
:
chpasswd 命令从标准输入读取用户名和密码对列表,并使用此信息更新一组现有用户。每一行的格式为:
user_name:password
要将其放入您的脚本中,还要确保将 移动sudo
到执行管道的右侧:
echo "${USERNAME}:${PASSWORD}" | sudo chpasswd
推荐阅读
- python - MERGESORT 永远不会到达第二个数组/列表
- sql - 如何在其他 INSERT 语句中使用 INSERT 语句的结果?
- android - SettingsClient 的位置请求总是得到 RESULT_CANCELED
- javascript - 基于菜单项单击添加类
- c# - 当有数千个时将字符串转换为双精度
- python - Python如何触发API
- css - 内容填充第一列然后换行到下一列
- php - 如何将每个用户连接到他自己的数据库?
- reactjs - 使用 ref 代替 id 来响应 css
- python - 使用 python 'ipaddress' 以及 _methods 与直接值的目的