我花了3个小时在Go上搜索SCP实施工作
我找不到任何有效的文件或例子。
这个要点不起作用。这是错误的,但在一些答案中列为工作代码。 https://gist.github.com/jedy/3357393
答案 0 :(得分:1)
我没有尝试过使用它,但在godoc上搜索SCP让我scp-go。 http://godoc.org/github.com/laher/scp-go/scp
答案 1 :(得分:0)
你可以用一个简单的 https://github.com/tmc/scp
使用scp将本地文件复制到远程计算机的代码片段在
之下package main
import (
"io/ioutil"
"net"
"github.com/tmc/scp"
"golang.org/x/crypto/ssh"
)
func getKeyFile() (key ssh.Signer, err error) {
//usr, _ := user.Current()
file := "Path to your key file(.pem)"
buf, err := ioutil.ReadFile(file)
if err != nil {
return
}
key, err = ssh.ParsePrivateKey(buf)
if err != nil {
return
}
return
}
func main() {
key, err := getKeyFile()
if err != nil {
panic(err)
}
// Define the Client Config as :
config := &ssh.ClientConfig{
User: "root",
Auth: []ssh.AuthMethod{
ssh.PublicKeys(key),
},
HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
return nil
},
}
client, err := ssh.Dial("tcp", "<remote ip>:22", config)
if err != nil {
panic("Failed to dial: " + err.Error())
}
session, err := client.NewSession()
if err != nil {
panic("Failed to create session: " + err.Error())
}
err = scp.CopyPath("local file path", "remote path", session)
if err != nil {
panic("Failed to Copy: " + err.Error())
}
defer session.Close()
希望它有所帮助。
答案 2 :(得分:0)
这里是最先进的SCP client implementation。
除了常规的CRUD操作外,它还支持批量上传,符号链接和修改时间保存。
var config *ssh.ClientConfig
//load config ...
timeoutMS := 15000
service, err := scp.NewStorager("127.0.0.1:22", timeoutMS, config)
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
location := "/tmp/myfile"
err = service.Upload(ctx, location, 0644, []byte("somedata"))
if err != nil {
log.Fatal(err)
}
reader, err := service.Download(ctx, location)
if err != nil {
log.Fatal(err)
}