用golang进行scp

因为不理解搜索出来的示例,所以我进行了调查。

我不太理解,但我使用ssh包来执行远程scp命令…这样可以吗?

if err := session.Run("/usr/bin/scp -qrt ./"); err != nil {

没见过的-t选项是什么?
尝试使用scp命令吧。
http://www.openbsd.org/cgi-bin/man.cgi?query=scp
嗯?上面没有提到。

如果你仔细看之前的示例代码的开头,你会发现有一个URL:
https://blogs.oracle.com/janp/entry/how_the_scp_protocol_works
你可以试着阅读一下。

看起来SCP协议正在使用此隐藏选项。
似乎是通过-t选项启动,并从标准输入接收文件信息和文件内容。
具体来说,

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

这个部分对吧。

请发送权限信息、大小和文件名。发送文件内容,在最后以\x00结束。

我明白了,虽然很简单但有点麻烦,希望能够巧妙地包装起来。

广告
将在 10 秒后关闭
bannerAds