我得到了在远程主机上创建文件的代码:
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) }
但是需要将文件从远程主机复制到本地主机。我怎样才能做到这一点使用golang工具 **github.com/pkg/sftp 和 **golang.org/x/crypto/ssh 只?
您可以使用sftp包中的Open(path string)和WriteTo(w io.Writer)方法来完成此操作(当然,您需要os.File或类似的东西来写入)。
Open(path string)
WriteTo(w io.Writer)
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)