# ssh **Repository Path**: spwx/ssh ## Basic Information - **Project Name**: ssh - **Description**: golang ssh lib 远程执行命令,文件上传下载 模仿rsync和cp - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2021-03-17 - **Last Updated**: 2022-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目简介 本项目是基于golang标准库 ssh 和 sftp 开发 ``` cd example/rsync bash build.sh -> rsync.exe 可以用于简单的替换windows的rsync客户端 (注意使用的是sftp来模拟的rsync) ``` 本项目是对标准库进行一个简单的高层封装,使得可以在在 Windows Linux Mac 上非常容易的执行 ssh 命令, 以及文件,文件夹的上传,下载等操作. 1. 当src 为目录时 文件上传下载模仿rsync: 只和源有关. // rsync -av src/ dst ./src/* --> /root/dst/* // rsync -av src/ dst/ ./src/* --> /root/dst/* // rsync -av src dst ./src/* --> /root/dst/src/* // rsync -av src dst/ ./src/* --> /root/dst/src/* 2. 当src 为文件时 当dst为目录,以"/"结尾,则自动拼接上文件名 当dst为文件,不以“/”结尾时,则重命名文件 ## Install `go get github.com/pytool/ssh` ## Example ### 在远程执行ssh命令 提供3个方法: Run() Exec() Output() 1. Run() : 程序执行后,不再受执行者控制. 适用于启动服务端进程. 2. Exec() : 在控制台同步实时输出程序的执行结果. 3. Output() : 会等待程序执行完成后,输出执行结果,在需要对执行的结果进行操作时使用. ```go package main import ( "fmt" "github.com/pytool/ssh" ) func main() { c, err := ssh.NewClient("localhost", "22", "root", "ubuntu") if err != nil { panic(err) } defer c.Close() output, err := c.Output("uptime") if err != nil { panic(err) } fmt.Printf("Uptime: %s\n", output) } ``` ### 文件下载 ```go package main import ( "github.com/pytool/ssh" ) func main() { client, err := ssh.NewClient( "localhost", "22", "root", "ubuntu") if err != nil { panic(err) } defer client.Close() var remotedir = "/root/test/" // download dir var local = "/home/ubuntu/go/src/github.com/pytool/ssh/test/download/" client.Download(remotedir, local) // upload file var remotefile = "/root/test/file" client.Download(remotefile, local) } ``` ### 文件上传 ```go package main import ( "github.com/pytool/ssh" ) func main() { client, err := ssh.NewClient( "localhost", "22", "root", "ubuntu") if err != nil { panic(err) } defer client.Close() var remotedir = "/root/test/" // upload dir var local = "/home/ubuntu/go/src/github.com/pytool/ssh/test/upload/" client.Upload(local, remotedir) // upload file local = "/home/ubuntu/go/src/github.com/pytool/ssh/test/upload/file" client.Upload(local, remotedir) } ```