windows远程ssh连接linux服务器,sftp创建、读、写、删除linux路径、文件

import (
    "github.com/pkg/sftp"
	"golang.org/x/crypto/ssh"
)

func main() {
	sftpClient, err := SftpConnect("root", "mima", "192.168.xx.xx", 22)
	if err != nil {
		log.Info("creat sftpClient fail!")
		return
	}

	remoteFilePath := "/root/mqtt_benchmark/config.json.bak011"
	srcFile, err := sftpClient.Open(remoteFilePath)
	if err != nil {
		fmt.Println(fmt.Sprintf("sftpClient open file[%s] faile[%v]", remoteFilePath, err))
		return
	}
	defer srcFile.Close()

	dataByte, err := ioutil.ReadAll(srcFile)
	if err != nil && err != io.EOF {
		fmt.Println(err)
		return
	}

	fmt.Println("读取文件成功:\n", string(dataByte))

	//remoteWriteFilePath := "/root/mqtt_benchmark/yht"
	remoteWriteFilePath := "/a/b/c"
	// 创建路径
	err = sftpClient.MkdirAll(remoteWriteFilePath)
	if err != nil {
		fmt.Println("mkdir file path err:", err)
	}

	remoteWriteFile := remoteWriteFilePath + "/yhtsss.txt"

	srcFile01, err := sftpClient.OpenFile(remoteWriteFile, os.O_RDWR) //添加读写权限
	if err != nil{
		if err.Error() ==  "file does not exist" {
			fmt.Println("file does not exist, start creat file!")
			srcFile01, err = sftpClient.Create(remoteWriteFile) // 创建文件
			if err != nil {
				fmt.Println("creat file faile err:", err)
				return
			}
		} else {
			fmt.Println(fmt.Sprintf("sftpClient open file[%s] faile[%v]", remoteWriteFilePath, err))
			return
		}
	}
	defer srcFile01.Close()

	writeByte := []byte("1111  testing: i am yanghaitao!!!")
	n, err := srcFile01.Write(writeByte) //写文件
	if err != nil {
		fmt.Println("write file fail:", err)
	}

	fmt.Printf("wrote %v bytes success! \n", n)

	// 删除文件
	err = sftpClient.Remove(remoteWriteFile)
	if err != nil {
		fmt.Println("remove dir fail:", err)
		return
	}
	fmt.Println(fmt.Sprintf("remove file[%s] success!", remoteWriteFile))

	// 移除路径
	err = sftpClient.Remove(remoteWriteFilePath)
	if err != nil {
		fmt.Println("sremove dir fail:", err)
		return
	}

	fmt.Println(fmt.Sprintf("remove path[%s] success!", remoteWriteFilePath))
}
// ssh远程连接linux服务器
func SftpConnect(user, password, host string, port int) (sftpClient *sftp.Client, err error)  { //参数: 远程服务器用户名, 密码, ip, 端口

	auth := make([]ssh.AuthMethod, 0)

	auth = append(auth, ssh.Password(password))

	clientConfig := &ssh.ClientConfig{
		User: user,

		Auth: auth,

		Timeout: 30 * time.Second,

		HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
			return nil
		},

	}

	addr := host + ":" + strconv.Itoa(port)

	sshClient, err := ssh.Dial("tcp", addr, clientConfig) //连接ssh

	if err != nil {
		fmt.Println("连接ssh失败", err)
		return
	}

	fmt.Println("ssh 连接成功:sshClient Conn:", &sshClient.Conn)

	if sftpClient, err = sftp.NewClient(sshClient); err != nil { //创建客户端
		fmt.Println("创建客户端失败", err)
		return
	}

	fmt.Println("sftp 创建成功:sftpClient addr:", &sftpClient)
	return
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心码农1号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值