亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > go語言實現(xiàn)sftp包上傳文件和文件夾到遠程服務(wù)器操作

go語言實現(xiàn)sftp包上傳文件和文件夾到遠程服務(wù)器操作

熱門標簽:400開頭電話怎樣申請 利用地圖標注位置 貴州電話智能外呼系統(tǒng) 江蘇呼叫中心外呼系統(tǒng)有效果嗎 官渡電銷外呼管理系統(tǒng)怎么收費 赤峰電銷 谷歌美發(fā)店地圖標注 杭州人工智能電銷機器人費用 地圖區(qū)域圖標注后導(dǎo)出

使用go語言的第三方包:github.com/pkg/sftp和golang.org/x/crypto/ssh實現(xiàn)文件和文件夾傳輸。

1、創(chuàng)建connect方法:

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,
  HostKeyCallback: ssh.InsecureIgnoreHostKey(), //ssh.FixedHostKey(hostKey),
 }
 // 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
}

2、上傳文件

func uploadFile(sftpClient *sftp.Client, localFilePath string, remotePath string) {
 srcFile, err := os.Open(localFilePath)
 if err != nil {
  fmt.Println("os.Open error : ", localFilePath)
  log.Fatal(err)
 }
 defer srcFile.Close()
 var remoteFileName = path.Base(localFilePath)
 dstFile, err := sftpClient.Create(path.Join(remotePath, remoteFileName))
 if err != nil {
  fmt.Println("sftpClient.Create error : ", path.Join(remotePath, remoteFileName))
  log.Fatal(err)
 }
 defer dstFile.Close()
 ff, err := ioutil.ReadAll(srcFile)
 if err != nil {
  fmt.Println("ReadAll error : ", localFilePath)
  log.Fatal(err)
 }
 dstFile.Write(ff)
 fmt.Println(localFilePath + " copy file to remote server finished!")
}

3、上傳文件夾

func uploadDirectory(sftpClient *sftp.Client, localPath string, remotePath string) {
 localFiles, err := ioutil.ReadDir(localPath)
 if err != nil {
  log.Fatal("read dir list fail ", err)
 }
 for _, backupDir := range localFiles {
  localFilePath := path.Join(localPath, backupDir.Name())
  remoteFilePath := path.Join(remotePath, backupDir.Name())
  if backupDir.IsDir() {
   sftpClient.Mkdir(remoteFilePath)
   uploadDirectory(sftpClient, localFilePath, remoteFilePath)
  } else {
   uploadFile(sftpClient, path.Join(localPath, backupDir.Name()), remotePath)
  }
 }
 fmt.Println(localPath + " copy directory to remote server finished!")
}

4、上傳測試

func DoBackup(host string, port int, userName string, password string, localPath string, remotePath string) {
 var (
  err  error
  sftpClient *sftp.Client
 )
 start := time.Now()
 sftpClient, err = connect(userName, password, host, port)
 if err != nil {
  log.Fatal(err)
 }
 defer sftpClient.Close()
 _, errStat := sftpClient.Stat(remotePath)
 if errStat != nil {
  log.Fatal(remotePath + " remote path not exists!")
 }
 backupDirs, err := ioutil.ReadDir(localPath)
 if err != nil {
  log.Fatal(localPath + " local path not exists!")
 }
 uploadDirectory(sftpClient, localPath, remotePath)
 elapsed := time.Since(start)
 fmt.Println("elapsed time : ", elapsed)
}

補充:go實現(xiàn)ssh遠程機器并傳輸文件

核心依賴包:

golang.org/x/crypto/ssh

github.com/pkg/sftp

其中g(shù)olang.org/x/crypto/ssh 可從github上下載,

下載地址:https://github.com/golang/crypto

ssh連接源碼(這里是根據(jù)秘鑰連接):

var keypath = "key/id_rsa"
//獲取秘鑰
func publicKey(path string) ssh.AuthMethod {
 keypath, err := homedir.Expand(path)
 if err != nil {
 fmt.Println("獲取秘鑰路徑失敗", err)
 }
 key, err1 := ioutil.ReadFile(keypath)
 if err1 != nil {
 fmt.Println("讀取秘鑰失敗", err1)
 }
 signer, err2 := ssh.ParsePrivateKey(key)
 if err2 != nil {
 fmt.Println("ssh 秘鑰簽名失敗", err2)
 }
 return ssh.PublicKeys(signer)
}
//獲取ssh連接
func GetSSHConect(ip, user string, port int) (*ssh.Client) {
 con := ssh.ClientConfig{
 User: user,
 Auth: []ssh.AuthMethod{publicKey(keypath)},
 HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
 return nil
 },
 }
 addr := fmt.Sprintf("%s:%d", ip, port)
 client, err := ssh.Dial("tcp", addr, con)
 if err != nil {
 fmt.Println("Dail failed: ", err)
 panic(err)
 }
 return client
}
// 遠程執(zhí)行腳本
func Exec_Task(ip, user, localpath, remotepath string) int {
 port := 22
 client := GetSSHConect(ip, user, port)
 UploadFile(ip, user, localpath, remotepath, port)
 session, err := client.NewSession()
 if err != nil {
 fmt.Println("創(chuàng)建會話失敗", err)
 panic(err)
 }
 defer session.Close()
 remoteFileName := path.Base(localpath)
 dstFile := path.Join(remotepath, remoteFileName)
 err1 := session.Run(fmt.Sprintf("/usr/bin/sh %s", dstFile))
 if err1 != nil {
 fmt.Println("遠程執(zhí)行腳本失敗", err1)
 return 2
 } else {
 fmt.Println("遠程執(zhí)行腳本成功")
 return 1
 }
}

文件傳輸功能:

//獲取ftp連接
func getftpclient(client *ssh.Client) (*sftp.Client) {
 ftpclient, err := sftp.NewClient(client)
 if err != nil {
 fmt.Println("創(chuàng)建ftp客戶端失敗", err)
 panic(err)
 }
 return ftpclient
}
//上傳文件
func UploadFile(ip, user, localpath, remotepath string, port int) {
 client := GetSSHConect(ip, user, port)
 ftpclient := getftpclient(client)
 defer ftpclient.Close()
 remoteFileName := path.Base(localpath)
 fmt.Println(localpath, remoteFileName)
 srcFile, err := os.Open(localpath)
 if err != nil {
 fmt.Println("打開文件失敗", err)
 panic(err)
 }
 defer srcFile.Close()
 dstFile, e := ftpclient.Create(path.Join(remotepath, remoteFileName))
 if e != nil {
 fmt.Println("創(chuàng)建文件失敗", e)
 panic(e)
 }
 defer dstFile.Close()
 buffer := make([]byte, 1024)
 for {
 n, err := srcFile.Read(buffer)
 if err != nil {
 if err == io.EOF {
 fmt.Println("已讀取到文件末尾")
 break
 } else {
 fmt.Println("讀取文件出錯", err)
 panic(err)
 }
 }
 dstFile.Write(buffer[:n]) 
 //注意,由于文件大小不定,不可直接使用buffer,否則會在文件末尾重復(fù)寫入,以填充1024的整數(shù)倍
 }
 fmt.Println("文件上傳成功")
}
//文件下載
func DownLoad(ip, user, localpath, remotepath string, port int) {
 client := GetSSHConect(ip, user, port)
 ftpClient := getftpclient(client)
 defer ftpClient.Close()
 srcFile, err := ftpClient.Open(remotepath)
 if err != nil {
 fmt.Println("文件讀取失敗", err)
 panic(err)
 }
 defer srcFile.Close()
 localFilename := path.Base(remotepath)
 dstFile, e := os.Create(path.Join(localpath, localFilename))
 if e != nil {
 fmt.Println("文件創(chuàng)建失敗", e)
 panic(e)
 }
 defer dstFile.Close()
 if _, err1 := srcFile.WriteTo(dstFile); err1 != nil {
 fmt.Println("文件寫入失敗", err1)
 panic(err1)
 }
 fmt.Println("文件下載成功")
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang-gin-mgo高并發(fā)服務(wù)器搭建教程
  • golang HTTP 服務(wù)器 處理 日志/Stream流的操作
  • golang項目如何上線部署到Linu服務(wù)器(方法詳解)
  • 部署Django到阿里云服務(wù)器教程示例
  • 解決啟動django,瀏覽器顯示“服務(wù)器拒絕訪問”的問題
  • Nginx+Uwsgi+Django 項目部署到服務(wù)器的思路詳解

標簽:黔西 保定 松原 泰安 河池 武漢 鷹潭 宜春

巨人網(wǎng)絡(luò)通訊聲明:本文標題《go語言實現(xiàn)sftp包上傳文件和文件夾到遠程服務(wù)器操作》,本文關(guān)鍵詞  語言,實現(xiàn),sftp,包上傳,包,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go語言實現(xiàn)sftp包上傳文件和文件夾到遠程服務(wù)器操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于go語言實現(xiàn)sftp包上傳文件和文件夾到遠程服務(wù)器操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    精品国产香蕉伊思人在线又爽又黄| 青青久久精品国产免费看| 九九九在线视频| 日日夜人人澡人人澡人人看免| 久久国产影视免费精品| 一级片片| 久久国产精品只做精品| 精品视频一区二区三区免费| 999久久狠狠免费精品| 国产一区二区精品| 国产高清视频免费| 日韩在线观看视频免费| 久草免费在线观看| 九九精品久久| 久久福利影视| 韩国毛片基地| 香蕉视频一级| 国产成人啪精品| 亚州视频一区二区| 深夜做爰性大片中文| 国产视频网站在线观看| 999精品视频在线| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚洲第一视频在线播放| 精品在线免费播放| 欧美一区二区三区在线观看| 国产一区二区福利久久| 亚洲天堂免费观看| 日韩中文字幕在线播放| 日本伦理网站| 一本伊大人香蕉高清在线观看| 国产精品1024永久免费视频| 日韩中文字幕一区二区不卡| 国产成人精品影视| 成人免费观看网欧美片| 久久福利影视| 午夜在线亚洲| 色综合久久天天综合| 99色视频在线观看| 午夜久久网| 韩国毛片免费大片| 欧美日本免费| 成人影院一区二区三区| 精品在线观看国产| 四虎影视久久久| 999久久66久6只有精品| 国产亚洲免费观看| 青青青草视频在线观看| 香蕉视频久久| 欧美电影免费看大全| 亚洲第一页乱| 国产一区二区精品| 久久国产一区二区| 99色视频在线| 夜夜操天天爽| 精品视频在线观看免费| 亚洲 欧美 91| 国产91精品系列在线观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 黄视频网站在线看| 日韩欧美一二三区| 国产伦理精品| 国产福利免费视频| 日韩在线观看免费| 欧美国产日韩一区二区三区| 国产精品123| 中文字幕97| 韩国三级香港三级日本三级| 日韩免费在线观看视频| 欧美激情一区二区三区在线| 国产亚洲男人的天堂在线观看| 日日夜夜婷婷| 欧美激情在线精品video| 国产精品免费久久| 日本在线www| 久久国产精品只做精品| 亚洲精品久久久中文字| 日韩在线观看免费| 国产不卡高清在线观看视频| 成人影视在线播放| 国产视频久久久| 国产成人啪精品| 欧美18性精品| 成人影院一区二区三区| 毛片成人永久免费视频| 免费毛片播放| 欧美一级视| 成人免费一级毛片在线播放视频| 中文字幕一区二区三区精彩视频 | 欧美激情中文字幕一区二区| 日韩免费在线观看视频| 在线观看导航| 99久久精品国产国产毛片| 亚洲 激情| 亚洲精品久久久中文字| 精品国产一区二区三区免费| 97视频免费在线| 日韩av成人| 日韩在线观看免费完整版视频| 欧美一级视| 精品视频在线观看免费| 精品视频免费在线| 国产成人精品一区二区视频| 可以在线看黄的网站| 一本高清在线| 日本伦理黄色大片在线观看网站| 国产a免费观看| 国产视频一区在线| 午夜欧美成人久久久久久| 九九九在线视频| 久久国产一久久高清| 四虎影视久久| 一级毛片视频在线观看| 欧美大片毛片aaa免费看| 99色视频在线观看| 国产亚洲男人的天堂在线观看| 午夜在线影院| 欧美大片一区| 天天色色色| 尤物视频网站在线观看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 亚欧成人乱码一区二区| 亚洲 激情| 二级特黄绝大片免费视频大片| 日韩一级黄色| 久久精品大片| 美女免费黄网站| 久久精品大片| 国产福利免费观看| 亚洲精品中文字幕久久久久久| 日韩欧美一二三区| 成人高清视频免费观看| 韩国三级视频网站| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 超级乱淫黄漫画免费| 成人高清护士在线播放| 亚洲第一视频在线播放| 午夜家庭影院| 亚洲天堂免费观看| 日韩中文字幕在线亚洲一区| 毛片高清| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 人人干人人草| 国产伦久视频免费观看 视频 | 成人a大片高清在线观看| 欧美大片a一级毛片视频| 欧美一区二区三区性| 精品视频一区二区三区| 久草免费资源| 日本伦理黄色大片在线观看网站| 一级毛片视频免费| 午夜久久网| 久久99青青久久99久久| 青青青草视频在线观看| 99热精品在线| 四虎久久精品国产| 亚洲www美色| 日韩一级黄色| 天天做日日爱| 日日夜夜婷婷| 成人影院一区二区三区| 91麻豆精品国产自产在线| 日韩在线观看视频网站| 青青久热| 国产麻豆精品高清在线播放| 四虎影视久久| 日韩字幕在线| 欧美激情一区二区三区中文字幕| 999精品在线| 久久99这里只有精品国产| 精品在线免费播放| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品久久久久久综合网| 中文字幕一区二区三区 精品| 99热热久久| 青青久久精品国产免费看| 日韩在线观看免费| 国产一区二区高清视频| 欧美大片毛片aaa免费看| 欧美爱爱动态| 国产极品白嫩美女在线观看看| 国产成人啪精品视频免费软件| 可以免费在线看黄的网站| 亚洲 欧美 91| 日本特黄特黄aaaaa大片| 91麻豆精品国产高清在线| 精品视频一区二区三区免费| 四虎影视久久| 国产91精品一区二区| 中文字幕一区二区三区 精品| 国产欧美精品| 国产一区二区精品久| 亚洲 男人 天堂| 国产不卡福利| 亚久久伊人精品青青草原2020| 免费一级生活片| 色综合久久天天综合观看| 成人免费高清视频| 999精品在线| 亚欧乱色一区二区三区|