响应Fabric的双重密码提示

我正在使用此Fabricfunction尝试将用户添加到Ubuntu服务器。 这不是抛出一个错误,但我不能用脚本完成后我想添加的用户login。 如果我手动添加用户,运行adduser myusername命令后,系统会提示两次input密码。 在这个脚本中,重复的提示(正如我所说的那样)正在被处理(我认为是非常有效的)

  if not sudo("adduser %s | echo -e '%s\n%s\n'" % (new_user,passwd,passwd)).failed: 

你能解释一下在这个function中如何更恰当地处理这个问题吗?

 def user_add(new_user, passwd=False): """Add new user""" with settings(hide('running', 'stdout', 'stderr'), warn_only=True): # if is_host_up(env.host): if not passwd: passwd = generate_passwd() if not sudo("adduser %s | echo -e '%s\n%s\n'" % (new_user,passwd,passwd)).failed: run('echo "{user} ALL=(ALL:ALL) ALL" >> /etc/sudoers'.format(user=new_user)) ...other code not included 

adduser只是Debian / Ubuntu特有的更为常见的useradd命令的前端,它在命令行上使用了各种选项,包括一个预先哈希的密码作为-p选项。 为此,您可能应该使用所需的选项而不是adduser来调用useradd

在大多数其他的Linux发行版中, adduser只是简单的符号链接到useradd ,或者完全不存在。