【问题标题】:SCP Client in GoGo 中的 SCP 客户端
【发布时间】:2013-09-26 07:28:07
【问题描述】:

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

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

  1. 我运行它并得到这个:

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

【问题讨论】:

  • 如果解决密码问题的答案有帮助,请记住将其标记为已接受;)

标签: ssh go scp


【解决方案1】:

您被定向到的代码已损坏。该示例还使用公钥身份验证,这不一定是您唯一的选择。如果您可以改为允许密码身份验证,您可以让自己更轻松一些。

我刚刚通过修改您使用的示例自己上传了:

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

}

【讨论】:

  • 谢谢。我尝试了这段代码,但也许我遗漏了一些东西,因为它给出了错误。它在“session.Run()”之后出现恐慌,它说 Failed to run: Process exited with: 1. Reason is: () 所以如果它成功运行,就可以上传一个文件通过在 ssh 中使用 session.Run()?
  • 您现在已经成功编译代码并连接到 SSH 服务器。理论上,您可以运行 scp 命令并通过session.StdinPipe 将其输入。但是,您的程序无法运行 scp 很可能是因为您在指定路径中没有它:/usr/bin/scp
  • 我在我的 C:\cygwin64\bin 中找到了一个 scp,我应该使用它作为路径吗?我在哪里可以找到 usr/bin?
  • 我知道 Go,但我对 scp 几乎没有任何经验。尝试将 /usr/bin/scp 更改为 C:\cygwin64\bin\scp 看看它是否有效? /usr/bin 适用于 Linux 机器,而不是 Windows。
  • 感谢您的回复。我已经更改并运行了它,它什么也没做,也没有关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 2018-12-17
  • 2015-05-28
相关资源
最近更新 更多