英文:
Golang copy remote file to local folder using sftp golang library
问题
我得到了在远程主机上创建文件的代码:
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)
}
但是现在需要将文件从远程主机复制到本地主机。我该如何只使用 github.com/pkg/sftp 和 golang.org/x/crypto/ssh 这两个 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
得分: 13
你可以使用sftp包中的Open(path string)
和WriteTo(w io.Writer)
方法来实现(当然你需要一个os.File或类似的对象来写入)。
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.")
// 在现有的ssh连接上打开一个SFTP会话。
sftp, err := sftp.NewClient(client)
if err != nil {
log.Fatal(err)
}
defer sftp.Close()
srcPath := "/tmp/"
dstPath := "C:/temp/"
filename := "test.txt"
// 打开源文件
srcFile, err := sftp.Open(srcPath + filename)
if err != nil {
log.Fatal(err)
}
defer srcFile.Close()
// 创建目标文件
dstFile, err := os.Create(dstPath + filename)
if err != nil {
log.Fatal(err)
}
defer dstFile.Close()
// 复制文件
srcFile.WriteTo(dstFile)
英文:
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)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论