https://github.com/rinetd/ssh
golang ssh lib 远程执行命令,文件上传下载 模仿rsync和cp
https://github.com/rinetd/ssh
go golang lib library ssh
Last synced: 20 days ago
JSON representation
golang ssh lib 远程执行命令,文件上传下载 模仿rsync和cp
- Host: GitHub
- URL: https://github.com/rinetd/ssh
- Owner: rinetd
- License: apache-2.0
- Created: 2018-10-30T06:42:31.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2019-03-12T09:12:55.000Z (almost 7 years ago)
- Last Synced: 2025-05-28T03:05:17.925Z (8 months ago)
- Topics: go, golang, lib, library, ssh
- Language: Go
- Homepage: https://github.com/rinetd/ssh
- Size: 50.8 KB
- Stars: 38
- Watchers: 2
- Forks: 12
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## 项目简介
本项目是基于golang标准库 ssh 和 sftp 开发
本项目是对标准库进行一个简单的高层封装,使得可以在在 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)
}
```