我已经为此苦苦挣扎了大约一个星期。我已经为 golang 尝试了一个 scp 客户端,但被告知代码已损坏,并且贡献的“固定”代码也无法正常工作。无论如何,我放弃了文件传输并决定只使用 ssh 创建文件并保存在远程机器上。
在进入 scp 路由之前,我在golang中成功运行了 ssh 客户端,所以这可能是一个很好的解决方案。
在 ssh 客户端中,它只执行了“ls”命令,我知道有一个“touch”命令可以创建文件。
var b bytes.Buffer
session.Stdout = &b
if err := session.Run("ls"); err != nil {
panic("Failed to run: " + err.Error())
}
fmt.Println(b.String())
最终我想要实现的是读取本地文件,可能通过os.Open(localfile)
获取它的内容然后使用“touch”命令在远程机器上创建一个新文件,然后对其进行编辑并更早地粘贴本地文件中的内容。或者也许有一个命令可以创建一个新文件并准备好它的内容?
这看起来很有希望,虽然这段代码给了我一个错误,但根据我的观察,这将创建一个名为“testfile”的文件,内容为“123456789\n”,然后我认为使用上传它session.Run("/usr/bin/scp -qrt ./");
?
go func() {
w, _ := session.StdinPipe()
defer w.Close()
content := "123456789\n"
fmt.Fprintln(w, "C0644", len(content), "testfile")
fmt.Fprint(w, content)
fmt.Fprint(w, "\x00") // 传输以\x00结束
}()
if err := session.Run("/usr/bin/scp -qrt ./"); err != nil {
panic("Failed to run: " + err.Error())
}
上面的代码可以在我之前关于 scp in golang 的问题中找到
我不确定这是否是代码的作用,因为由于错误我无法运行它。我试图找出该/usr/bin/scp -qrt ./
命令的作用,尽管不能完全理解它。
我已经在这个项目上待了一个星期,非常沮丧。任何帮助将不胜感激。提前致谢。