我正在尝试使用 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。所以,我不考虑使用它。但无论如何,我愿意接受其他建议。先感谢您。
2 回答
呼啦一阵风
TA贡献1802条经验 获得超6个赞
/bin/sh -c "cat file"在 Go 中读取文件不需要执行。正常打开文件,并将其提供给 ssh 命令
keyFile, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
cmd := exec.Command("ssh", "user@host", "cat >> ~/.ssh/authorized_keys")
cmd.Stdin = keyFile
// run the command however you want
out, err := cmd.CombinedOutput()
if err != nil {
fmt.Println(string(out))
log.Fatal(err)
}
- 2 回答
- 0 关注
- 243 浏览
添加回答
举报
0/150
提交
取消