我需要使用密码验证的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()
}
答案 0 :(得分:1)
这个自我回答的问题的答案可能会有所帮助:
Golang write input and get output from terminal process
至少,他在回答中提到他能够使用密码"来获取ssh访问权限,这在问题中没有明确提及 - 这就是为什么你可能没有#&# 39;在搜索网站时找到它?