鍍金池/ 問答/GO  HTML/ 作為新手詢問GO 使用SSH KEY upload 也就是俗稱SFTP上傳

作為新手詢問GO 使用SSH KEY upload 也就是俗稱SFTP上傳

1 最近在寫SFTP上傳文件,看了網(wǎng)上的一堆代碼,實驗了不少,始終不成功,特來此詢問

func Sftp_connect(user, pbi, local string) {
    fmt.Println(user, pbi, local)
    pub := PublicKeyFile(pbi)
    sshConfig := &ssh.ClientConfig{
        User: user,
        Auth: []ssh.AuthMethod{
            pub,
        },
        HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
            return nil
        },
    }
    conn, err := ssh.Dial("tcp", local, sshConfig)
    if err != nil {
        fmt.Println("sulwan")
        fmt.Println(err)
    } else {
        fmt.Println(conn)
        defer conn.Close()
    }
}

報錯:
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x63240d]

goroutine 1 [running]:
golang.org/x/crypto/ssh.(*connection).clientAuthenticate(0xc42011c200, 0xc42010e340, 0x0, 0xa)

/data/golang/src/golang.org/x/crypto/ssh/client_auth.go:63 +0x2dd

golang.org/x/crypto/ssh.(*connection).clientHandshake(0xc42011c200, 0x6f8316, 0x12, 0xc42010e340, 0x0, 0x0)

/data/golang/src/golang.org/x/crypto/ssh/client.go:113 +0x2c4

golang.org/x/crypto/ssh.NewClientConn(0x730780, 0xc42000e530, 0x6f8316, 0x12, 0xc420055e70, 0x730780, 0xc42000e530, 0x0, 0x0, 0x1, ...)

/data/golang/src/golang.org/x/crypto/ssh/client.go:83 +0x100

golang.org/x/crypto/ssh.Dial(0x6f4442, 0x3, 0x6f8316, 0x12, 0xc420055e70, 0x0, 0xc420016798, 0xc420055ec2)

/data/golang/src/golang.org/x/crypto/ssh/client.go:177 +0xb3

github.com/sulwan/until.Sftp_connect(0x6f611b, 0xc, 0x6f5b84, 0xa, 0x6f8316, 0x12)

/data/golang/src/budhad/until/sftp.go:32 +0x28f

main.main()

/data/go/sina/main.go:38 +0x60

尋求上述問題解答,最好能求得一個SFTP pubkey認證上傳完整例子

回答
編輯回答
舊言

建議去學(xué)習一下sftpfs庫,獲取方式如下:

go get github.com/spf13/afero/sftpfs

這些現(xiàn)成的庫,可以免去你的很多工作。

2017年1月22日 11:48