如何在GO中通过ssh隧道下载文件

muk1a3rh  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(281)

我试图找到一种通过ssh tunneling连接到服务器并下载文件的方法。但无论我怎么尝试,都无法使其工作。
我在Windows10上运行这段代码
下面是我使用的代码:

package main

import (
    "fmt"
    "io"
    "io/ioutil"
    "net"
    "os"
    "strconv"

    "github.com/sgreben/sshtunnel"
    "golang.org/x/crypto/ssh"
)

    func main() {
    keyPath := "sshtest2_private.pem"
    authConfig := sshtunnel.ConfigAuth{
            Keys: []sshtunnel.KeySource{{Path: &keyPath}},
        }
    sshAuthMethods, _ := authConfig.Methods()
    clientConfig := ssh.ClientConfig{
            User:            "some_user",
            Auth:            sshAuthMethods,
            HostKeyCallback: ssh.InsecureIgnoreHostKey(),
        }
    tunnelConfig := sshtunnel.Config{
            SSHAddr:   "xx.xxx.xxx.xx:22",
            SSHClient: &clientConfig,
        }
    conn, _, err := sshtunnel.Dial("tcp", "zzz.zzz.zzz.zzz:22", &tunnelConfig)
    if err != nil {
    panic(err)
        }
        fmt.Fprintln(conn, "GET /")
        io.Copy(os.Stdout, conn)
    }

当我尝试连接时,我收到以下错误:

panic: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain

对于身份验证,我使用sshtest2_private.pem文件,它与我的main.go位于同一目录中,看起来如下所示:

-----BEGIN RSA PRIVATE KEY-----

the content of my key

-----END RSA PRIVATE KEY-----

不知道为什么它会抱怨公钥问题,也不知道怎么解决这个问题。我做错了什么?

nimxete2

nimxete21#

SSH服务器仅允许对$HOME/.ssh/authorized_keys中列出的那些密钥进行公钥身份验证
1.为sshtest2_private.pem创建公钥

ssk-keygen -f sshtest2_private.pem -y

此命令将公钥输出到stdout。
1.将此公钥附加到xx.xxx.xxx.xx:22,文件/home/some_user/.ssh/authorized_keys如果文件不存在,请创建它。访问权限必须为用户专用(chmod 600 /home/some_user/.ssh/authorized_keys
我测试过了,它能用。
顺便说一句。你的隧道的端点是zzz.zzz.zzz.zzz:22,但你把它用于GET /。看起来它的端口应该是:80,而不是:22

相关问题