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