【发布时间】:2022-01-07 07:16:27
【问题描述】:
我正在尝试弄清楚如何实现从远程复制文件并从缓冲区中获取数据[]byte。
我已通过参考本指南成功实现上传:https://chuacw.ath.cx/development/b/chuacw/archive/2019/02/04/how-the-scp-protocol-works.aspx
在go func 内部有SCP 的upload 进程的实现,但我不知道如何更改它。
有什么建议吗?
func download(con *ssh.Client, buf bytes.Buffer, path string,) ([]byte,error) {
//https://chuacw.ath.cx/development/b/chuacw/archive/2019/02/04/how-the-scp-protocol-works.aspx
session, err := con.NewSession()
if err != nil {
return nil,err
}
buf.WriteString("sudo scp -f " + path + "\n")
stdin, err := session.StdinPipe()
if err != nil {
return nil,err
}
go func() {
defer stdin.Close()
fmt.Fprint(stdin, "C0660 "+strconv.Itoa(len(content))+" file\n")
stdin.Write(content)
fmt.Fprint(stdin, "\x00")
}()
output, err := session.CombinedOutput("sudo scp -f " + path)
buf.Write(output)
if err != nil {
return nil,&DeployError{
Err: err,
Output: buf.String(),
}
}
session.Close()
session, err = con.NewSession()
if err != nil {
return nil,err
}
defer session.Close()
return output,nil
}
【问题讨论】:
-
您是否有理由尝试手动实现 scp 协议,而不是使用现有库或更标准的协议?
-
很高兴知道如何“实施”它
-
您是否实现了 HTTP 而不是使用 http 库?如果您要求学习如何实现它,那很好 - 但您至少需要尝试实现它,然后我们可以帮助您解决可能遇到的问题。
-
如您所见,我已经为
uploading实现了它。我不明白为了我所问的有什么关系。它应该可以工作,但我在此过程中遗漏了一些东西。我不想使用任何包wahtsoever。