【问题标题】:Copying ssh public key to server将 ssh 公钥复制到服务器
【发布时间】: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。所以,我不考虑使用它。

但无论如何,我愿意接受其他建议。提前谢谢你。

【问题讨论】:

标签: ssh go


【解决方案1】:

您无需执行/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-id 时,我没有在远程服务器中安装密钥。如何输入我的密码? "ssh", "user@host"在哪里输入密码?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 2017-09-06
    • 1970-01-01
    • 2011-05-21
    • 2016-08-20
    相关资源
    最近更新 更多