使用Go语言实现远程传输文件_Golang

前言

之前有一篇介绍如何使用Go语言通过SSH协议来执行远程命令:如何使用Go语言实现远程执行命令 同样,通过SSH协议也可以使用Go语言来远程传输文件。

除了 SSH 的库,为了传输文件,还需要用到 github.com/pkg/sftp 这个库。

实现方式

废话不多说,直接看代码。 由于是基于 SSH 协议实现的远程文件传输,所以先创建 SSH 的连接,再创建传输文件的 sftp 客户端。

func connect(user, password, host string, port int) (*sftp.Client, error) {
 var (
 auth   []ssh.AuthMethod
 addr   string
 clientConfig *ssh.ClientConfig
 sshClient *ssh.Client
 sftpClient *sftp.Client
 err   error
 )
 // get auth method
 auth = make([]ssh.AuthMethod, 0)
 auth = append(auth, ssh.Password(password))

 clientConfig = &ssh.ClientConfig{
 User: user,
 Auth: auth,
 Timeout: 30 * time.Second,
 }

 // connet to ssh
 addr = fmt.Sprintf("%s:%d", host, port)

 if sshClient, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
 return nil, err
 }

 // create sftp client
 if sftpClient, err = sftp.NewClient(sshClient); err != nil {
 return nil, err
 }

 return sftpClient, nil
}

发送文件

使用上面的 connect 方法创建 sftpClient 后,发送文件很简单。

package main

import (
 "fmt"
 "log"
 "os"
 "path"
 "time"

 "github.com/pkg/sftp"

 "golang.org/x/crypto/ssh"
)

func main() {
 var (
 err  error
 sftpClient *sftp.Client
 )

 // 这里换成实际的 SSH 连接的 用户名,密码,主机名或IP,SSH端口
 sftpClient, err = connect("root", "rootpass", "127.0.0.1", 22)
 if err != nil {
 log.Fatal(err)
 }
 defer sftpClient.Close()

 // 用来测试的本地文件路径 和 远程机器上的文件夹
 var localFilePath = "/path/to/local/file/test.txt"
 var remoteDir = "/remote/dir/"
 srcFile, err := os.Open(localFilePath)
 if err != nil {
 log.Fatal(err)
 }
 defer srcFile.Close()

 var remoteFileName = path.Base(localFilePath)
 dstFile, err := sftpClient.Create(path.Join(remoteDir, remoteFileName))
 if err != nil {
 log.Fatal(err)
 }
 defer dstFile.Close()

 buf := make([]byte, 1024)
 for {
 n, _ := srcFile.Read(buf)
 if n == 0 {
  break
 }
 dstFile.Write(buf)
 }

 fmt.Println("copy file to remote server finished!")
}

获取文件

从远程机器上获取文件的方式略有不同,但也很简单。

package main

import (
 "fmt"
 "log"
 "os"
 "path"
 "time"

 "github.com/pkg/sftp"

 "golang.org/x/crypto/ssh"
)

func main() {

 var (
 err  error
 sftpClient *sftp.Client
 )

 // 这里换成实际的 SSH 连接的 用户名,密码,主机名或IP,SSH端口
 sftpClient, err = connect("root", "rootpass", "127.0.0.1", 22)
 if err != nil {
 log.Fatal(err)
 }
 defer sftpClient.Close()

 // 用来测试的远程文件路径 和 本地文件夹
 var remoteFilePath = "/path/to/remote/path/test.txt"
 var localDir = "/local/dir"

 srcFile, err := sftpClient.Open(remoteFilePath)
 if err != nil {
 log.Fatal(err)
 }
 defer srcFile.Close()

 var localFileName = path.Base(remoteFilePath)
 dstFile, err := os.Create(path.Join(localDir, localFileName))
 if err != nil {
 log.Fatal(err)
 }
 defer dstFile.Close()

 if _, err = srcFile.WriteTo(dstFile); err != nil {
 log.Fatal(err)
 }

 fmt.Println("copy file from remote server finished!")
}

总结

上面的例子只是演示了文件传输,传输文件夹也很简单,只是多了遍历文件夹和创建文件夹的步骤,具体的函数可以自行查看 sftp 库中doc。以上就是Go语言实现远程传输文件的全部内容,希望本文对大家学习Go语言有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件操作
, 文件传输
, golang
远程执行shell
golang 远程传输文件、c语言实现ftp文件传输、c语言实现文件传输、易语言远程传输文件夹、golang 文件传输,以便于您获取更多的相关知识。

时间: 2024-11-05 19:28:04

使用Go语言实现远程传输文件_Golang的相关文章

不需要远程传输文件Linux如何关闭scp和sftp命令

  Linux用户们在进行远程文件的传输时,经常会使用scp和sftp命令来进行.不过这两个命令也会让我们的电脑存在一些风险,因此在不需要远程传输文件的时候,我们就可以将它们关闭.那么该如何禁止scp和sftp呢?下面就是具体的方法了. sftp介绍 sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能 scp介绍 两台主机之间传输文件一般使用scp命令,通常用scp命令

如何使用Go语言实现远程执行命令_Golang

前言 远程执行命令有什么用?为什么要远程执行命令? 如果你只有2,3台服务器需要管理的时候,远程执行命令确实没有没多大作用,你可以登录到每台服务器上去完成各种操作. 当你的服务器大于3台的时候,远程执行的命令的方式就可以大大提高你的生产力了. 如果你有一个可以远程执行命令的工具,那么就可以像操作单台机器那样操作多台机器,机器越多,效率提高的越多. 远程执行命令最常用的方法就是利用 SSH 协议,将命令发送到远程机器上执行,并获取返回结果. 一般命令 所谓一般命令,就是在一定时间内会执行完的命令.

Java中用Socket远程传输文件出现连接超时的异常

问题描述 这是服务端代码:publicclassFileServer{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile("D:\a.txt");FileInputStreamfis=newFileInputStream(file);ServerSocketss=newServerSocket(8801);Socketclient=ss.accept();OutputStreamnetOut=client

《爱情公寓3》热播风靡全国 网络人软件助您远程传输共享

随着<爱情公寓3>的热播,这部被90后封为"神剧"的恶搞情景剧,刷新了无数电视以及网络收视记录.<爱情公寓>的经典台词,如:"我一口盐汽水喷死你",以及招牌人物--好男人曾小贤.双面御姐胡一菲等等也被网友们争相追捧. 搞笑.离奇.浪漫.感人四大元素是<爱情公寓3>制胜的法宝.自<爱情公寓3>在安徽等卫视联合播出伊始,便引发观众热议.该剧在电视台火热播出的同时,又创下互联网播放最新纪录,优酷土豆单日播放量已接近2000万

win7向远程机传输文件

  首先,打开开始菜单,在程序自带的 "附件" 中找到 "远程桌面连接"并打开,出现远程桌面对话框; 其次,在对话框左下角点击"选项",选择"本地资源对话框",在本地设备和资源下点击"详细信息",在弹出的对话框中选择相应的磁盘驱动器,确定,连接; 最后,输入远程机的用户名和密码,进入远程机后就可以用"复制-粘贴"的方式向远程机传输文件了.

如何应用Win7远程桌面连接功能传输文件

  在局域网中为了方便与其他工作站交流信息,我们常常会用到远程桌面功能,许多人会认为这样的功能简单得几乎不值一提,不过在实际使用过程中,我们有时会遇到各种特殊的远程桌面连接需求,要想顺利满足这些特殊的连接需求,就必须要掌握一些远程桌面的使用技巧. 让远程桌面端口躲避攻击 大家知道,在默认状态下远程桌面使用的端口一般为"3389",如果我们不及时将这个端口号码更改掉的话,那么许多别有用心的黑客可能会利用这个端口,来远程控制和入侵本地工作站,以便窃取保存在本地工作站中的各类隐私信息.为了保

如何在vs中,做一个对话框,通过按钮调用或关闭“P2P远程协助文件传输SDK.exe”。

问题描述 如何在vs中,做一个对话框,通过按钮调用或关闭"P2P远程协助文件传输SDK.exe". 如何在vs中,做一个对话框,通过按钮调用或关闭"P2P远程协助文件传输SDK.exe". 解决方案 按钮响应事件函数中,CreateProcess,TerminateProcess来分别调用,关闭"P2P远程协助文件传输SDK.exe". 解决方案二: 你好大神.求具体的实现代码啊

Linux 使用远程传输命令 scp 进行服务器文件互传例子

前几天 WordPress大学 所在的服务器环境不太稳定,CPU 占用总是 100%,折腾了好几次都没有找到原因,只好考虑重新配置环境,考虑到配置和优化好环境需要几个小时,总不能将网站停掉吧,所以要将 WordPress大学 网站临时迁移到另外的服务器运行,配置好再迁回来. 看来下阿里云的两个云服务器,都是同一个区的,所以决定通过内网进行文件传输,速度快不说(正常传输文件的速度能达到35m~50m/s),还不占用公网带宽. 阿里云云服务器有一个安全组策略,可能需要设置下 内网入.出方向的IP白名

Linux使用scp远程传输命令进行服务器文件互传(阿里云服务器)_Linux

前几天 WordPress大学 所在的服务器环境不太稳定,CPU 占用总是 100%,折腾了好几次都没有找到原因,只好考虑重新配置环境,考虑到配置和优化好环境需要几个小时,总不能将网站停掉吧,所以要将 WordPress大学 网站临时迁移到另外的服务器运行,配置好再迁回来. 看来下阿里云的两个云服务器,都是同一个区的,所以决定通过内网进行文件传输,速度快不说(正常传输文件的速度能达到35m~50m/s),还不占用公网带宽. 阿里云云服务器有一个安全组策略,可能需要设置下 内网入.出方向的IP白名