为了账号安全,请及时绑定邮箱和手机立即绑定

将 ssh 公钥复制到服务器

将 ssh 公钥复制到服务器

Go
白板的微信 2021-11-15 15:35:09
我正在尝试使用 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)

}


查看完整回答
反对 回复 2021-11-15
?
catspeake

TA贡献1111条经验 获得超0个赞

为此,您可以简单地执行 rsync 或 scp。


查看完整回答
反对 回复 2021-11-15
  • 2 回答
  • 0 关注
  • 243 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信