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
}