Golang SFTP 客户端-服务器实例,通过SSH连接上传和下载文件(流式)。

301 阅读1分钟

多年来,我们一直投入大量的个人时间和精力,与大家分享我们的知识。然而,我们现在需要你的帮助来维持这个博客的运行。你所要做的只是点击网站上的一个广告,否则它将由于托管等费用而不幸被关闭。谢谢你。

在这个例子中,我们将使用一个SFTP客户端和服务器,通过SSH连接上传/下载文件。对于服务器的模拟,我们将创建一个Docker容器,提供与服务器交互的基本功能。

**重要提示:**比起之前将文件读入内存的版本,更喜欢这个版本,因为它的内存效率不高。

结构

├── docker

文件

docker-compose.yaml

私钥认证需要复制SSH密钥。根据你的SSH设置,在运行docker命令之前使用$ cp ~/.ssh/[id_rsa|id_ed25519] ssh/ 命令。我有id_rsa 文件,因此使用它的原因。

version: "3.4"

sftp.go

在幕后,它与远程服务器建立了一个新的SSH连接,为SFTP客户端提供动力。由于缺乏内置的 "keepalive "和自动重新连接选项,每次调用Upload,DownloadInfo 函数时,只有当它被关闭时才会打开一个新的SSH连接。它目前利用 "密码 "和 "私钥 "认证方法,这些方法是通过Config 类型配置的。如果同时启用这两种方法,则以私钥认证为准。

package sftp

main.go

package main

测试

Docker

$ docker-compose up

运行

$ go run -race main.go
// When using private key auth