【发布时间】:2016-01-06 06:55:38
【问题描述】:
我正在尝试使用 Go 在我的本地 $HOME/.ssh/ 目录下添加一个公钥。
我一直在使用相同的代码运行多个命令而没有问题,但不是针对这个特定的。
identity := fmt.Sprintf("cat %s/.ssh/%s.pub", fileUtil.FindUserHomeDir(), p.sshkey.name)
address := fmt.Sprintf("| ssh %s@%s 'cat >> ~/.ssh/authorized_keys', p.projectname.name, p.host.name)
cmd := exec.Command(identity, address)
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
基本上我正在尝试运行:
cat /home/foo/.ssh/foobar.pub | ssh foo@bar.com 'cat >> ~/.shh/authorized_keys'"
如果我直接通过命令行运行它就可以了。
我想在不同的 OS X 机器上运行这个程序,其中一些机器没有安装 ssh-copy-id。所以,我不考虑使用它。
但无论如何,我愿意接受其他建议。提前谢谢你。
【问题讨论】:
-
exec.Command不是shell,所以没有|的概念。见stackoverflow.com/questions/10781516/… -
你可以使用 exec.Command 来执行 shell:
sh -c command