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
}


版权声明:本文为yanghaitao5000原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。