Я пытаюсь запустить команду scp as через golang exec.cmd, потому что неофициальные реализации, доступные для передачи scp, не работают для меня. Scp выполняется до тех пор, пока не запрашивает пароль, а затем я не могу записать данные на стандартный ввод. Возможно ли, что stdin перенаправлен куда-то еще?
var cmd *exec.Cmd
if m.IsDir() {
cmd = exec.Command("scp", "-r", src, user+"@"+client.Host+":"+dest)
} else {
cmd = exec.Command("scp", src, user+"@"+client.Host+":"+dest)
}
cmdWriter, err := cmd.StdinPipe()
if err != nil {
return err
}
err = cmd.Start()
if cred.Typ() == "PW" {
cmdWriter.Write( []byte(cred.Data()+"\n") )
} else {
log.Println( "credential typ not supported" )
}
err = cmd.Wait()
log.Println( "done" )
return err
Настройка cmd.Stdin на os.Stdin работает, но, конечно, мне нужно вручную вводить пароль, который не тот, который я хочу.
Или вы бы вообще не рекомендовали этот способ запуска scp? Я могу запускать простые команды SSH на сервере (с помощью «golang.org/x/crypto/ssh»). Есть ли способ передать двоичные файлы только через сеанс SSH?
Заранее спасибо.