用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结束。
我明白了,虽然很简单但有点麻烦,希望能够巧妙地包装起来。