如何向SSH提供密码?

时间:2015-02-28 19:56:59

标签: linux unix ssh go

我需要使用密码验证的scp从服务器下载文件。我怎么用Go去做?尝试了以下代码,但它没有传入密码。

package main

import (
    "os/exec"
    "time"
)

func main() {
    password := "password"
    cmd := exec.Command("scp", "admin@192.168.1.150:file", "file")

    in, err := cmd.StdinPipe()
    if err != nil {
        panic(err)
    }

    defer in.Close()

    out, err := cmd.StdoutPipe()
    if err != nil {
        panic(err)
    }

    defer out.Close()

    if err = cmd.Run(); err != nil {
        panic(err)
    }

    go func() {
        time.Sleep(10 * time.Second)
        _, err = in.Write([]byte(password + "\n"))
        if err != nil {
            panic(err)
        }
    }()
}

编辑:我最终使用了gexpect(github.com/ThomasRooney/gexpect)库。

package main

import (
    "github.com/ThomasRooney/gexpect"
    "log"
)

func main() {
    child, err := gexpect.Spawn("scp admin@192.168.1.150:file file")
    if err != nil {
        log.Fatalln(err)
    }
    child.Expect("password:")
    child.SendLine("password")
    child.Interact()
    child.Close()
}

1 个答案:

答案 0 :(得分:1)

这个自我回答的问题的答案可能会有所帮助:

Golang write input and get output from terminal process

至少,他在回答中提到他能够使用密码"来获取ssh访问权限,这在问题中没有明确提及 - 这就是为什么你可能没有#&# 39;在搜索网站时找到它?