问题描述:

I got the code for create a file on remote host:

config := &ssh.ClientConfig{

User: "xx",

HostKeyCallback: nil,

Auth: []ssh.AuthMethod{

ssh.Password("xx"),

},

}

config.SetDefaults()

sshConn, err := ssh.Dial("tcp", "192.xx.1.xx:22", config)

if err != nil {

panic(err)

}

defer sshConn.Close()

client, err := sftp.NewClient(sshConn)

if err != nil {

panic(err)

}

defer client.Close()

file, err := client.Create("/www/hello9.txt")

if err != nil {

panic(err)

}

defer file.Close()

if _, err := file.Write([]byte("Hello world")); err != nil {

log.Fatal(err)

}

But is needed to copy a file from remote host to local host. How can I achieve this using the golang tools github.com/pkg/sftp and golang.org/x/crypto/ssh only?

网友答案:

You can do it using the Open(path string) and WriteTo(w io.Writer) methods from the sftp package (and of course you need an os.File or something similar to write to).

client, err := ssh.Dial("tcp", "192.x.x.x:22", sshConfig)
if err != nil {
    panic("Failed to dial: " + err.Error())
}
fmt.Println("Successfully connected to ssh server.")

// open an SFTP session over an existing ssh connection.
sftp, err := sftp.NewClient(client)
if err != nil {
    log.Fatal(err)
}
defer sftp.Close()

srcPath := "/tmp/"
dstPath := "C:/temp/"
filename := "test.txt"

// Open the source file
srcFile, err := sftp.Open(srcPath + filename)
if err != nil {
    log.Fatal(err)
}
defer srcFile.Close()

// Create the destination file
dstFile, err := os.Create(dstPath + filename)
if err != nil {
    log.Fatal(err)
}
defer dstFile.Close()

// Copy the file
srcFile.WriteTo(dstFile)
相关阅读:
Top