本项目是对标准库进行一个简单的高层封装,使得可以在在 Windows Linux Mac 上非常容易的执行 ssh 命令, 以及文件,文件夹的上传,下载等操作.
Go to file
Rick.Chan 60d53bae4f 改进私钥登录程序(Go 不再支持 rsa 授权模式).
Signed-off-by: Rick.Chan <cy@haoan119.com>
2023-02-10 13:23:44 +08:00
example 修正模块名称. 2022-02-25 11:34:46 +08:00
test/upload golang lib ssh 2018-10-30 17:45:54 +08:00
.gitignore 修正 MkdirAll 算法,当文件存在时不报错. 2022-02-25 11:10:16 +08:00
LICENSE Initial commit 2018-10-30 14:42:31 +08:00
README.md 修正模块名称. 2022-02-25 11:34:46 +08:00
auth.go 修正 MkdirAll 算法,当文件存在时不报错. 2022-02-25 11:10:16 +08:00
client.go 改进私钥登录程序(Go 不再支持 rsa 授权模式). 2023-02-10 13:23:44 +08:00
client_test.go ssh 2019-03-12 17:12:42 +08:00
config.go fix uploadfile for windows&linux 2018-11-13 17:42:29 +08:00
go.mod 修正模块名称. 2022-02-25 11:34:46 +08:00
sftp.go 修正 MkdirAll 算法,当文件存在时不报错. 2022-02-25 11:10:16 +08:00
sftp_check_test.go ssh 2019-03-12 17:12:42 +08:00
sftp_test.go 修正模块名称. 2022-02-25 11:34:46 +08:00
ssh.go 修正 MkdirAll 算法,当文件存在时不报错. 2022-02-25 11:10:16 +08:00
sudo.go golang lib ssh 2018-10-30 17:45:54 +08:00
util.go 改进私钥登录程序(Go 不再支持 rsa 授权模式). 2023-02-10 13:23:44 +08:00

README.md

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 blacktea.vip.cpolar.top/OrgGo/ssh

Example

在远程执行ssh命令

提供3个方法: Run() Exec() Output()

  1. Run() : 程序执行后,不再受执行者控制. 适用于启动服务端进程.
  2. Exec() : 在控制台同步实时输出程序的执行结果.
  3. Output() : 会等待程序执行完成后,输出执行结果,在需要对执行的结果进行操作时使用.
package main
import (
    "fmt"
    "blacktea.vip.cpolar.top/OrgGo/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 (
    "blacktea.vip.cpolar.top/OrgGo/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/blacktea.vip.cpolar.top/OrgGo/ssh/test/download/"
    client.Download(remotedir, local)

    // upload file
    var remotefile = "/root/test/file"

    client.Download(remotefile, local)
}

文件上传

package main

import (
    "blacktea.vip.cpolar.top/OrgGo/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/blacktea.vip.cpolar.top/OrgGo/ssh/test/upload/"
    client.Upload(local, remotedir)

    // upload file
    local = "/home/ubuntu/go/src/blacktea.vip.cpolar.top/OrgGo/ssh/test/upload/file"
    client.Upload(local, remotedir)
}