go语言使用scp的方法实例分析
本文实例讲述了go语言使用scp的方法。分享给大家供大家参考。具体如下:
package main
import (
"code.google.com/p/go.crypto/ssh"
"crypto"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"fmt"
"io"
)
const privateKey = `content of id_rsa`
type keychain struct {
key *rsa.PrivateKey
}
func (k *keychain) Key(i int) (interface{}, error) {
if i != 0 {
return nil, nil
}
return &k.key.PublicKey, nil
}
func (k *keychain) Sign(i int, rand io.Reader, data []byte) (sig []byte, err error) {
hashFunc := crypto.SHA1
h := hashFunc.New()
h.Write(data)
digest := h.Sum(nil)
return rsa.SignPKCS1v15(rand, k.key, hashFunc, digest)
}
func main() {
block, _ := pem.Decode([]byte(privateKey))
rsakey, _ := x509.ParsePKCS1PrivateKey(block.Bytes)
clientKey := &keychain{rsakey}
clientConfig := &ssh.ClientConfig{
User: "wuhao",
Auth: []ssh.ClientAuth{
ssh.ClientAuthKeyring(clientKey),
},
}
client, err := ssh.Dial("tcp", "127.0.0.1:22", clientConfig)
if err != nil {
panic("Failed to dial: " + err.Error())
}
session, err := client.NewSession()
if err != nil {
panic("Failed to create session: " + err.Error())
}
defer session.Close()
go func() {
w, _ := session.StdinPipe()
defer w.Close()
content := "123456789\n"
fmt.Fprintln(w, "C0644", len(content), "testfile")
fmt.Fprint(w, content)
fmt.Fprint(w, "\x00") // 传输以\x00结束
}()
if err := session.Run("/usr/bin/scp -qrt ./"); err != nil {
panic("Failed to run: " + err.Error())
}
}
希望本文所述对大家的Go语言程序设计有所帮助。
相关推荐
-
go语言中时间戳格式化的方法
本文实例讲述了go语言中时间戳格式化的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: var t int64 = time.Now().Unix() var s string = time.Unix(t, 0).Format("2006-01-02 15:04:05") println(s) 这方式比较特别,按照123456来记忆吧:01月02号 下午3点04分05秒 2006年 希望本文所述对大家的Go语言程序设计有所帮助.
-
go语言获取系统盘符的方法
本文实例讲述了go语言获取系统盘符的方法.分享给大家供大家参考.具体如下: 涉及golang调用winapi获取系统盘符的技巧.代码如下: 复制代码 代码如下: // cs project main.go package main import ( "fmt" . "strconv" "syscall" ) func GetLogicalDrives() []string { kernel32 := syscall.MustLoadDLL
-
go语言使用RC4加密的方法
本文实例讲述了go语言使用RC4加密的方法.分享给大家供大家参考.具体分析如下: 这里需要使用rc4包来实现rc4加密,核心代码如下: 复制代码 代码如下: key := []byte{ 1, 2, 3, 4, 5, 6, 7 } c, err := rc4.NewCipher(key) dst := make([]byte, len(src)) c.XORKeyStream(dst, src) 希望本文所述对大家的Go语言程序设计有所帮助.
-
go语言通过管道连接两个命令行进程的方法
本文实例讲述了go语言通过管道连接两个命令行进程的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import ( "os" "os/exec" "fmt" "flag" "strings" ) func main() { generator := exec.Command("cmd1") consumer := exe
-
go语言使用pipe读取子进程标准输出的方法
本文实例讲述了go语言使用pipe读取子进程标准输出的方法.分享给大家供大家参考.具体如下: 其核心代码如下: 复制代码 代码如下: cmd := exec.Command("cmd", "args") stdout, err := cmd.StdoutPipe() cmd.Start() r := bufio.NewReader(stdout) line, _, err := r.ReadLine() 希望本文所述对大家的Go语言程序设计有所帮助.
-
Go语言计算两个经度和纬度之间距离的方法
本文实例讲述了Go语言计算两个经度和纬度之间距离的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import ( "fmt" "math" ) func main() { lat1 := 29.490295 lng1 := 106.486654 lat2 := 29.615467 lng2 := 106.581515 f
-
go语言实现的memcache协议服务的方法
本文实例讲述了go语言实现的memcache协议服务的方法.分享给大家供大家参考.具体如下: 完整实例代码点击此处本站下载. 1. Go语言代码如下: 复制代码 代码如下: package memcachep import ( "bufio" "fmt" "io" "strconv" "strings" ) //mc请求产生一个request对象 type MCReq
-
go语言计算两个时间的时间差方法
本文实例讲述了go语言计算两个时间的时间差方法.分享给大家供大家参考.具体分析如下: go语言计算两个时间的时间差,代码很简单,返回1天前.1周前还是1月前的时间 package main import ( "fmt" "time" ) func main() { //Add方法和Sub方法是相反的,获取t0和t1的时间距离d是使用Sub //将t0加d获取t1就是使用Add方法 k := time.Now() //一天之前 d, _ := time.ParseDu
-
Go语言计算指定年月天数的方法
本文实例讲述了Go语言计算指定年月天数的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import ( "fmt" "bufio" "os" "regexp" "strconv" ) func main() { year := input("year", "^[0-9]{1}[0-
-
go语言使用scp的方法实例分析
本文实例讲述了go语言使用scp的方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: package main import ( "code.google.com/p/go.crypto/ssh" "crypto" "crypto/rsa" "crypto/x509" "encoding/pem" "fmt" "
-
Go语言中常量定义方法实例分析
本文实例讲述了Go语言中常量定义方法.分享给大家供大家参考.具体分析如下: 常量的定义与变量类似,只不过使用 const 关键字. 常量可以是字符.字符串.布尔或数字类型的值. 复制代码 代码如下: package main import "fmt" const Pi = 3.14 func main() { const World = "世界" fmt.Println("Hello", World) fmt.Printl
-
Kotlin 语言中调用 JavaScript 方法实例详解
Kotlin 语言中调用 JavaScript 方法实例详解 Kotlin 已被设计为能够与 Java 平台轻松互操作.它将 Java 类视为 Kotlin 类,并且 Java 也将 Kotlin 类视为 Java 类.但是,JavaScript 是一种动态类型语言,这意味着它不会在编译期检查类型.你可以通过动态类型在 Kotlin 中自由地与 JavaScript 交流,但是如果你想要 Kotlin 类型系统的全部威力 ,你可以为 JavaScript 库创建 Kotlin 头文件. 内联 J
-
R语言字符串知识点总结及实例分析
在R语言中的单引号或双引号对中写入的任何值都被视为字符串. R语言存储的每个字符串都在双引号内,即使是使用单引号创建的依旧如此. 在字符串构造中应用的规则 在字符串的开头和结尾的引号应该是两个双引号或两个单引号.它们不能被混合. 双引号可以插入到以单引号开头和结尾的字符串中. 单引号可以插入以双引号开头和结尾的字符串. 双引号不能插入以双引号开头和结尾的字符串. 单引号不能插入以单引号开头和结尾的字符串. 有效字符串的示例 以下示例阐明了在 R 语言中创建字符串的规则. a <- 'Start
-
R语言矩阵知识点总结及实例分析
矩阵是其中元素以二维矩形布局布置的R对象. 它们包含相同原子类型的元素. 虽然我们可以创建一个只包含字符或只包含逻辑值的矩阵,但它们没有太多用处. 我们使用包含数字元素的矩阵用于数学计算. 使用matrix()函数创建一个矩阵. 语法 在R语言中创建矩阵的基本语法是 matrix(data, nrow, ncol, byrow, dimnames) 以下是所使用的参数的说明 数据是成为矩阵的数据元素的输入向量. nrow是要创建的行数. ncol是要创建的列数. byrow是一个逻辑线索. 如果
-
Go语言中的指针运算实例分析
本文实例分析了Go语言中的指针运算方法.分享给大家供大家参考.具体分析如下: Go语言的语法上是不支持指针运算的,所有指针都在可控的一个范围内使用,没有C语言的*void然后随意转换指针类型这样的东西.最近在思考Go如何操作共享内存,共享内存就需要把指针转成不同类型或者对指针进行运算再获取数据. 这里对Go语言内置的unsafe模块做了一个实验,发现通过unsafe模块,Go语言一样可以做指针运算,只是比C的方式繁琐一些,但是理解上是一样的. 下面是实验代码: 复制代码 代码如下: packag
-
python私有属性和方法实例分析
本文实例分析了python的私有属性和方法.分享给大家供大家参考.具体实现方法如下: python默认的成员函数和成员变量都是公开的,并且没有类似别的语言的public,private等关键词来修饰. 在python中定义私有变量只需要在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就会为私有的了. 在内部,python使用一种 name mangling 技术,将 __membername替换成 _classname__membername,所以你在外部使用原来的私有成
-
C语言接口与实现方法实例详解
本文以实例形式详细讲述了C语言接口与实现方法,对于深入掌握C语言程序设计有一定的借鉴价值.分享给大家供大家参考.具体分析如下: 一般来说,一个模块有两部分组成:接口和实现.接口指明模块要做什么,它声明了使用该模块的代码可用的标识符.类型和例程,实现指明模块是如何完成其接口声明的目标的,一个给定的模块通常只有一个接口,但是可能会有许多种实现能够提供接口所指定的功能.每个实现可能使用不同的算法和数据结构,但是它们都必须符合接口所给出的使用说明.客户调用程序是使用某个模块的一段代码,客户调用程序导入接
-
Go语言常用字符串处理方法实例汇总
本文实例汇总了Go语言常用字符串处理方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: package main import ( "fmt" "strings" //"unicode/utf8" ) func main() { fmt.Println("查找子串是否在指定的字符串中") fmt.Println(" Contains 函数的用法")
-
jsp中Action使用session方法实例分析
本文实例分析了jsp中Action使用session方法.分享给大家供大家参考.具体如下: 在Struts2里,如果需要在Action中使用session,可以通过下面两种方式得到 1.通过ActionContext class中的方法getSession得到 2.Action实现org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作 下面先看一个采用第一种方式,在action中得到session的例子 复制代码 代码如下: p
随机推荐
- HTML5 移动页面自适应手机屏幕宽度详解
- 网页编辑器ckeditor和ckfinder配置步骤分享
- 图解RedHat AS4.0硬盘版安装教程
- spring boot装载自定义yml文件
- CSS也可以把IE6弄死
- Android模拟器中安装apk的方法
- PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
- php 远程包含文件漏洞分析第1/6页
- Linux下安装PHP MSSQL扩展教程
- jQuery实现弹出窗口弹出div层的实例代码
- Windows 2008 r2 防火墙设置端口例外的方法
- Android编程开发之ScrollView嵌套GridView的方法
- Android 6.0开发实现关机菜单添加重启按钮的方法
- 另外两种Android沉浸式状态栏实现思路
- Kotlin实现多函数接口的简化调用
- C#多线程与异步的区别详解
- 修改jquery.lazyload.js实现页面延迟载入
- 无法使用pip命令安装python第三方库的原因及解决方法
- 生成代码从T到T1、T2、Tn自动生成多个类型的泛型实例代码
- C# 数组中的 indexOf 方法及使用