好吧,我正在尝试创建一个脚本来自动在Linux服务器中创建用户,因此我在每台服务器中生成了ssh密钥,并编写了如下代码:
user = teste
p = 'senha123'
os.system("ssh myuser@lab sudo useradd -p " + p + " -d "+ "/home/" + user+ " -m "+ " -c \""+ name+"\" " + user)`
但是,我得到了错误:
Usage: useradd [options] LOGIN useradd -D useradd -D [options]
Options: -b, --base-dir BASE_DIR base directory for the home directory of the new account -c, --comment COMMENT GECOS field of the new account -d, --home-dir HOME_DIR home directory of the new account -D, --defaults print or change default useradd configuration -e, --expiredate EXPIRE_DATE expiration date of the new account -f, --inactive INACTIVE password inactivity period of the new account -g, --gid GROUP name or ID of the primary group of the new account -G, --groups GROUPS list of supplementary groups of the new account -h, --help display this help message and exit -k, --skel SKEL_DIR use this alternative skeleton directory -K, --key KEY=VALUE override /etc/login.defs defaults -l, --no-log-init do not add the user to the lastlog and faillog databases -m, --create-home create the user's home directory -M, --no-create-home do not create the user's home directory -N, --no-user-group do not create a group with the same name as the user -o, --non-unique allow to create users with duplicate (non-unique) UID -p, --password PASSWORD encrypted password of the new account -r, --system create a system account -R, --root CHROOT_DIR directory to chroot into -s, --shell SHELL login shell of the new account -u, --uid UID user ID of the new account -U, --user-group create a group with the same name as the user -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user ma pping
512
当我删除ssh myuser@lab
部分时,脚本将在本地主机上工作。
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
您正在像对待ssh
一样使用execve(2)
语义,在其中您将命令和参数作为单独的参数传递(sudo
,xargs
和{{1 }}有效。
find -exec
而是使用ssh
语义,因此它期望使用单个文字Shell命令(例如system(3)
,su
,eval
和Python的{{1} }。
对任意命令执行此操作的一种通用方法是,首先将要运行的shell命令分配给另一个字符串:
bash -c
然后使用os.system
对remote_command="sudo useradd -p " + p + " -d "+ "/home/" + user+ " -m "+ " -c \""+ name+"\" " + user
进行转义:
shlex.quote
或者,跳过ssh
以避免添加另一层转义:
import shlex
os.system("ssh myuser@lab " + shlex.quote(remote_command))
答案 1 :(得分:0)
我不太确定它是否可以工作,但是您可以尝试一次吗?
os.system("ssh myuser@lab \'sudo useradd -p " + p + " -d "+ "/home/" + user+ " -m "+ " -c \""+ name+"\" " + user+"\'")