婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > go語言實現sftp包上傳文件和文件夾到遠程服務器操作

go語言實現sftp包上傳文件和文件夾到遠程服務器操作

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

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

1、創建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實現ssh遠程機器并傳輸文件

核心依賴包:

golang.org/x/crypto/ssh

github.com/pkg/sftp

其中golang.org/x/crypto/ssh 可從github上下載,

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

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

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
}
// 遠程執行腳本
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("創建會話失敗", 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("遠程執行腳本失敗", err1)
 return 2
 } else {
 fmt.Println("遠程執行腳本成功")
 return 1
 }
}

文件傳輸功能:

//獲取ftp連接
func getftpclient(client *ssh.Client) (*sftp.Client) {
 ftpclient, err := sftp.NewClient(client)
 if err != nil {
 fmt.Println("創建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("創建文件失敗", 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,否則會在文件末尾重復寫入,以填充1024的整數倍
 }
 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("文件創建失敗", e)
 panic(e)
 }
 defer dstFile.Close()
 if _, err1 := srcFile.WriteTo(dstFile); err1 != nil {
 fmt.Println("文件寫入失敗", err1)
 panic(err1)
 }
 fmt.Println("文件下載成功")
}

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

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

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

巨人網絡通訊聲明:本文標題《go語言實現sftp包上傳文件和文件夾到遠程服務器操作》,本文關鍵詞  語言,實現,sftp,包上傳,包,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《go語言實現sftp包上傳文件和文件夾到遠程服務器操作》相關的同類信息!
  • 本頁收集關于go語言實現sftp包上傳文件和文件夾到遠程服務器操作的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    色综合久久久久综合| 亚洲欧美日韩一区二区| 伊人性伊人情综合网| 欧美一级片在线观看| **网站欧美大片在线观看| 久久久噜噜噜久噜久久综合| 国产精品高清亚洲| 亚洲一区二区三区爽爽爽爽爽| 一区二区高清在线| 一级中文字幕一区二区| 亚洲欧美在线高清| 国产精品情趣视频| 一区二区三区在线免费播放| 亚洲免费观看高清| 日韩精品亚洲一区二区三区免费| 日韩高清在线不卡| 丰满白嫩尤物一区二区| jlzzjlzz亚洲女人18| 91免费看片在线观看| 欧洲国内综合视频| 日韩精品中文字幕一区二区三区| 中文字幕+乱码+中文字幕一区| 精品一区二区国语对白| 欧美激情中文不卡| 国产成人精品一区二| 国产女主播一区| youjizz国产精品| 亚洲裸体在线观看| 欧美日韩国产高清一区二区三区| 一区二区三区欧美视频| www.欧美.com| 国产日韩欧美精品电影三级在线| 美女性感视频久久| 精品国产一区二区亚洲人成毛片| 伦理电影国产精品| 国产欧美日韩另类一区| 成人av网站在线| 国产精品麻豆一区二区| 在线综合亚洲欧美在线视频| 秋霞电影一区二区| 欧美精品一区二区精品网| 国产一区二区电影| 亚洲色欲色欲www| 99久久777色| 日韩精品电影一区亚洲| 日韩一级高清毛片| 国产91对白在线观看九色| 国产精品美女一区二区在线观看| 在线亚洲免费视频| 五月天精品一区二区三区| 久久久久久亚洲综合影院红桃| 粉嫩欧美一区二区三区高清影视| 亚洲一区在线视频| 久久美女艺术照精彩视频福利播放| 成人激情图片网| 免费在线一区观看| 夜夜夜精品看看| 国产精品视频麻豆| 欧美电影免费观看高清完整版 | 日韩福利电影在线| 国产欧美1区2区3区| 欧美一区二区三区免费视频| 不卡av在线网| 国产福利91精品| 黄色日韩三级电影| 久久精品99久久久| 无吗不卡中文字幕| 亚洲综合在线观看视频| 亚洲欧洲www| 国产精品传媒视频| 国产精品国产a| 综合欧美亚洲日本| 国产精品你懂的在线欣赏| 国产三级三级三级精品8ⅰ区| 日韩一区国产二区欧美三区| 欧美日韩国产免费一区二区| 欧美日韩中文精品| 欧美私人免费视频| 日韩女优毛片在线| 久久久蜜桃精品| 国产精品国产三级国产三级人妇| 欧美极品美女视频| 亚洲另类在线视频| 视频一区视频二区在线观看| 日本免费在线视频不卡一不卡二| 久久精品国产免费看久久精品| 韩国一区二区在线观看| 成人动漫在线一区| 91免费版pro下载短视频| 欧美美女bb生活片| 久久亚洲捆绑美女| 亚洲靠逼com| 久久er99热精品一区二区| 成人国产精品视频| 欧美高清激情brazzers| 亚洲国产精品av| 午夜影院久久久| 丁香激情综合国产| 91精品国产综合久久小美女| 精品久久久久久久人人人人传媒| 国产精品久久久久久久久久免费看| 亚洲宅男天堂在线观看无病毒| 精品亚洲porn| 欧美一区二区播放| 亚洲成人午夜电影| 在线亚洲一区二区| 国产三级精品视频| 国产在线视频一区二区三区| 欧美视频中文一区二区三区在线观看 | 天天色 色综合| 99精品视频在线观看| 日本一区二区三区免费乱视频| 日韩欧美美女一区二区三区| 99久久精品免费看国产免费软件| 六月婷婷色综合| 日韩一二三四区| 色就色 综合激情| 成人天堂资源www在线| 亚洲成人综合在线| 欧美激情在线一区二区| 成a人片亚洲日本久久| 夜夜嗨av一区二区三区网页| 色婷婷综合久久久久中文| 亚洲已满18点击进入久久| 5858s免费视频成人| 精品一区二区在线看| 久久夜色精品一区| 91免费小视频| 日韩精品午夜视频| 国产精品乱码一区二三区小蝌蚪| 日韩高清一级片| 欧美日韩精品一区视频| 亚洲一级片在线观看| 色婷婷激情久久| 亚洲成人av免费| 中文字幕一区二区三区在线不卡| 欧美疯狂做受xxxx富婆| 福利视频网站一区二区三区| 国产自产高清不卡| 午夜欧美在线一二页| 中文字幕一区二区视频| 久久精品一区二区三区四区| 亚洲国产精品尤物yw在线观看| 欧美一区二区三区四区五区| 丁香激情综合五月| 久久国产欧美日韩精品| 亚洲男人的天堂一区二区| 欧美zozozo| 欧美性三三影院| 99国内精品久久| 成人国产精品免费| 韩国成人福利片在线播放| 天天影视涩香欲综合网| 亚洲成人av电影| 亚洲欧美在线观看| 日本一区二区视频在线观看| 日韩一区二区在线免费观看| 国产精品亚洲成人| 国产一区在线看| 国产精品资源网站| 国产自产2019最新不卡| 国产乱码精品一区二区三区忘忧草| 激情偷乱视频一区二区三区| 国产一区二区不卡在线 | 中文字幕视频一区二区三区久| 中文字幕在线一区二区三区| 亚洲一区二区三区四区在线观看| 美女mm1313爽爽久久久蜜臀| 97久久精品人人爽人人爽蜜臀 | 国产精品天干天干在观线| 久久精品一区四区| 日本一区二区免费在线| 国产校园另类小说区| **性色生活片久久毛片| 亚洲国产精品一区二区久久| 精品一区二区在线看| 色狠狠色噜噜噜综合网| 99久久婷婷国产综合精品| 欧美日韩电影在线| 久久久久久综合| 午夜婷婷国产麻豆精品| 国产老肥熟一区二区三区| 一本色道亚洲精品aⅴ| 26uuu亚洲婷婷狠狠天堂| 亚洲日本va午夜在线电影| 久久国产精品无码网站| 91在线免费看| 亚洲国产精品成人久久综合一区| 国产精品视频一二三区 | 欧美一级专区免费大片| 久久久99精品免费观看不卡| 日产国产欧美视频一区精品| 极品销魂美女一区二区三区| 91亚洲精品乱码久久久久久蜜桃| 欧美变态口味重另类| 亚洲成a人片综合在线| 老司机精品视频导航| 91麻豆精品在线观看| 久久久噜噜噜久久人人看| 伦理电影国产精品|