0

golang の ssh クライアントに苦労していましたが、freesshd サーバーの暗号は Go の ssh クライアントと互換性がないと言われたため、別のもの (PowerShell サーバー) をインストールしたところ、サーバーに正常に接続できました。

ローカルからリモートにファイルを転送する必要があるため、問題は解決していません。これは scp を介してのみ行うことができます。私はこのscp client for goに案内されましたが、2 つの問題があります。

  1. 私はそれを実行し、これを取得します: ここに画像の説明を入力

  2. privateKey に必要な id_rsa の内容にどこで、またはどのようにアクセスできますか? .ssh フォルダーに移動して github_rsa を確認し、その秘密鍵を使用しました。これは正しい使用方法ではないと確信していますが、上記の結果ではなく、何らかのエラーや無効な秘密鍵が表示されることはありません。 ?

4

1 に答える 1

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

}
于 2013-09-26T08:04:05.417 に答える