猿问

将 ssh 公钥复制到服务器

我正在尝试使用 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。所以,我不考虑使用它。


但无论如何,我愿意接受其他建议。先感谢您。


白板的微信
浏览 244回答 2
2回答

呼啦一阵风

/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 wantout, err := cmd.CombinedOutput()if err != nil {    fmt.Println(string(out))    log.Fatal(err)}

catspeake

为此,您可以简单地执行 rsync 或 scp。
随时随地看视频慕课网APP

相关分类

Go
我要回答