作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试使用 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。所以,我不考虑使用它。
但无论如何,我愿意接受其他建议。提前谢谢你。
最佳答案
您不需要执行 /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)
}
关于ssh - 将 ssh 公钥复制到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33019398/
我是一名优秀的程序员,十分优秀!