在ssh客户端中为golang创建文件

时间:2013-09-27 05:52:22

标签: ssh go scp

我一直在努力解决这个问题一周左右。我已经尝试了scp client for golang,但被告知代码已被破坏,并且提供的“修复”代码也不起作用。无论如何,我放弃了文件传输,并决定只使用ssh创建文件并保存在远程机器上。

我在进入scp路由之前成功运行了golang中的ssh客户端,所以这可能是一个很好的解决方案。

在ssh客户端中,它只执行了“ls”命令,我知道有一个“触摸”命令来创建文件。

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())
}

上述代码可在我之前的question about scp in golang

中找到

我不确定这是否是代码所做的,因为我因错误而无法运行它。我试图找出/usr/bin/scp -qrt ./命令的作用,虽然不能完全理解它。

我已经在这个项目上工作了一个星期,非常令人沮丧。任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我开始在go中编写一个scp客户端,我在这个过程中遇到了你的问题。我已经有了更多的理解它,所以现在我只是给你一些方向来自己做。如果我得到更多,我会更新我的答案。

  1. 您关于scp -qrt的问题:这是'sink'或'to'模式中的'remote scp'。 scp客户端依赖于远程主机上可用的另一个scp副本:scp -t为'to'/ sink模式,scp -f为'from'/ source模式。基本上scp -f将发回一个短文件'header',然后是文件本身的内容。 scp -t只希望收到同样的东西,用于本地存储。

  2. 这是一个很好的起点(实际上这可以提供你需要的所有东西),read this Oracle post。它详细解释了scp正在做什么。

  3. 有关类似语言的示例,请参阅this python implementation of scp

  4. 这应该让你顺利。干杯