Go中的SCP客户端

时间:2013-09-26 07:28:07

标签: ssh go scp

我正在努力和ssh client for golang但被告知freesshd服务器的密码与Go的ssh客户端不兼容,所以我只安装了另一个(PowerShell服务器),我可以成功连接到服务器

我的问题还没有结束,因为我现在需要将文件从本地传输到远程,这只能通过scp完成。我被引导到这个scp client for go并且有两个问题。

  1. 我运行它得到这个: enter image description here

  2. 我在哪里或如何访问privateKey所需的id_rsa内容?我刚进入我的.ssh文件夹并看到了一个github_rsa并使用了该私钥,我确定这不是正确使用的,但我不会看到某种错误或无效的私钥而不是上面的结果

1 个答案:

答案 0 :(得分:3)

您被引导的代码被破坏了。该示例还使用公钥身份验证,这不一定是您唯一的选择。如果您可以允许密码验证,那么您可以让自己更容易。

我只是通过修改您使用的示例来自行上传:

package main

import (
    "code.google.com/p/go.crypto/ssh"
    "fmt"
)

type password string

func (p password) Password(_ string) (string, error) {
    return string(p), nil
}

func main() {

    // Dial code is taken from the ssh package example
    config := &ssh.ClientConfig{
        User: "username",
        Auth: []ssh.ClientAuth{
            ssh.ClientAuthPassword(password("password")),
        },
    }
    client, err := ssh.Dial("tcp", "127.0.0.1:22", config)
    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")
    }()
    if err := session.Run("/usr/bin/scp -qrt ./"); err != nil {
        panic("Failed to run: " + err.Error())
    }

}