本项目是对标准库进行一个简单的高层封装,使得可以在在 Windows Linux Mac 上非常容易的执行 ssh 命令, 以及文件,文件夹的上传,下载等操作.
Go to file
rinetd 08411d78e5 add ssh functions: Run Exec Output 2018-12-19 14:33:31 +08:00
example add ssh functions: Run Exec Output 2018-12-19 14:33:31 +08:00
test/upload golang lib ssh 2018-10-30 17:45:54 +08:00
.gitignore Initial commit 2018-10-30 14:42:31 +08:00
LICENSE Initial commit 2018-10-30 14:42:31 +08:00
README.md add ssh functions: Run Exec Output 2018-12-19 14:33:31 +08:00
auth.go fix uploadfile for windows&linux 2018-11-13 17:42:29 +08:00
client.go add ssh functions: Run Exec Output 2018-12-19 14:33:31 +08:00
client_test.go fix some error 2018-11-06 15:37:35 +08:00
config.go fix uploadfile for windows&linux 2018-11-13 17:42:29 +08:00
sftp.go add ssh functions: Run Exec Output 2018-12-19 14:33:31 +08:00
sftp_is_test.go golang lib ssh 2018-10-30 17:45:54 +08:00
sftp_test.go fix uploadfile for windows&linux 2018-11-13 17:42:29 +08:00
ssh.go add ssh functions: Run Exec Output 2018-12-19 14:33:31 +08:00
sudo.go golang lib ssh 2018-10-30 17:45:54 +08:00
util.go fix uploadfile for windows&linux 2018-11-13 17:42:29 +08:00

README.md

项目简介

本项目是基于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() : 会等待程序执行完成后,输出执行结果,在需要对执行的结果进行操作时使用.
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)
}

文件下载

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)
}

文件上传

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)
}