Я пытаюсь добавить открытый ключ в свой локальный каталог $ HOME/.ssh /, используя Go.Копирование открытого ключа ssh на сервер
Я выполнял несколько команд с этим же кодом без проблем, но не для этого конкретного.
identity := fmt.Sprintf("cat %s/.ssh/%s.pub", fileUtil.FindUserHomeDir(), p.sshkey.name)
address := fmt.Sprintf("| ssh %[email protected]%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 [email protected] 'cat >> ~/.shh/authorized_keys'"
, который работает хорошо, если я запускаю его через командную строку непосредственно.
Я хочу запустить эту программу на разных компьютерах OS X, где у некоторых нет установленного идентификатора ssh-copy. Поэтому я не собираюсь использовать его.
Но, в любом случае, я открыт для других предложений. Заранее спасибо.
'exec.Command' не является оболочкой, поэтому нет понятия' ''. См. Http://stackoverflow.com/questions/10781516/how-to-pipe-several-commands-in-go – JimB
Вы можете использовать exec.Command для выполнения оболочки, хотя: 'sh -c command' – kostya