golang linux在exec的帮助下添加一个用户

golang linux在exec的帮助下添加一个用户,go,Go,我想用golang exec功能向我的服务器添加一个用户,但它不起作用我尝试了多种方法,但找不到有效的解决方案。是不是因为这个?“$(openssl密码-1测试)” 这是我的密码 cmd := exec.Command("sudo", "useradd -p", "$(openssl passwd -1 Test)", "Test1234") b, err := cmd.CombinedOutput(

我想用golang exec功能向我的服务器添加一个用户,但它不起作用我尝试了多种方法,但找不到有效的解决方案。是不是因为这个?“$(openssl密码-1测试)”

这是我的密码

    cmd := exec.Command("sudo", "useradd -p", "$(openssl passwd -1 Test)", "Test1234")
    b, err := cmd.CombinedOutput()
    if err != nil {
        fmt.Println(err)
    }
    fmt.Printf("%s\n", b)

exec.Command
直接运行可执行文件。每个字符串都是一个文字参数。在您的示例中,
sudo
是程序,您将
useradd-p
作为第一个参数传递,然后将
$(openssl passwd-1测试)
作为第二个参数传递,以此类推

useradd-p
是它自己的命令,不能作为单个字符串参数使用

$(openssl passwd-1测试)
是特定于bash(或另一个shell)的语法,在
exec.Command
中不起作用

实际上,您正在尝试运行三个可执行文件-
sudo
useradd
openssl
。您可以在单独的
exec.Command
调用中运行每个可执行文件,也可以直接运行shell

cmd:=exec.Command(“openssl”、“passwd”、“-1”、“Test”)
passwordBytes,err:=cmd.CombinedOutput()
如果出错!=零{
恐慌(错误)
}
//删除空白(可能是尾随的换行符)
密码:=strings.TrimSpace(字符串(passwordBytes))
cmd=exec.Command(“useradd”、“-p”、密码、“Test1234”)
b、 err:=cmd.CombinedOutput()
如果出错!=零{
fmt.Println(错误)
}
fmt.Printf(“%s\n”,b)
(我建议不要在go代码中直接运行
sudo
,因为您运行的程序应该直接管理权限。)


要直接运行shell以使用
$(…)
子命令语法,请参见。

分离
useradd
-p
您好,其返回的useradd:invalid字段“$1$Gu9wY7nT$.Tl39zCwvI3.I1bV0rg.b1”,这将是使用
useradd
时的问题。确保你要运行的任何程序都能在终端上运行。看起来您需要首先使用
-p
选项使用
crypt
对密码进行加密。但为什么它在终端上工作而不在围棋中?当我把
useradd-p$1$eHZrL9Px$RgxlN19Wu1S/yV8auzDeE/Test
放进去时,我不知道它能工作。shell是否正在扩展
$
字符?(如果将密码字符串用单引号括起来,其行为是否相同?)
a:=strings.TrimSpace(string(password))
成功了