douyuan4357 2016-04-22 06:03
浏览 475
已采纳

Golang使用sftp golang库将远程文件复制到本地文件夹

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?

  • 写回答

1条回答 默认 最新

  • dongxing1965 2016-04-22 09:23
    关注

    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)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 qt中connect两个signal
  • ¥20 pix2pixHD运行测试命令时出现数据类型错误无法反向传播的问题
  • ¥15 python处理Excel符合条件的行自动填写数据分类
  • ¥15 汇编hook举例并讲解(通俗易懂,学习用)
  • ¥20 用c++语言模拟键盘电子琴设计
  • ¥15 STM32cubemx生成keil工程,有问题与正常的情况不同,求解!
  • ¥15 如何自动点击银行app的安全键盘,实现密码自动输入
  • ¥15 关于四边形重叠的问题
  • ¥15 用verilog语言设计一个简易的八音符电子琴,可通过按键输入来控制音响。演奏时可以选择是手演奏(由键盘输入)或自动演奏已存入的乐曲。能够自动演奏多首乐曲,且每首乐曲可重复演奏
  • ¥15 sap gui脚本每次到导出Excel的时候就停住不动。不会另存为。