Posted mrylong
tags: 127个常用的JS代码片段,每段代码花30秒就能看懂(二) .net core 代码 sc 命令 执行 ( 密码输入错误 请重新输入 ) 12306的密码输入错误 ,第一次提示输入密码,输入exit退出
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GoLang执行需要输入密码的命令相关的知识,希望对你有一定的参考价值。
需求
- 同步一组视频到其他节点
- 限制带宽,防止占用过多带宽对访问造成影响
分析
scprsyncgexpect
免密(推荐)
root192.168.1.208
本地生成公私钥
ssh-keygen (一路回车默认即可)
~/.ssh
- id_rsa (私钥)
- id_rsa.pub (公钥)
上传公钥
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
~/.ssh/authorized_keys
os/exec
func main() {
args := []string{
"-avz", "--delete",
"--timeout=60", "--bwlimit=3000",
"/home/wsl/video/",
"[email protected]:/root/wsl/video/",
}
cmd := exec.Command("rsync", args...)
var stdOut, stdErr bytes.Buffer
cmd.Stderr = &stdErr
cmd.Stdout = &stdOut
err := cmd.Run()
if err != nil {
log.Fatalf("Got error:%s, msg:%s", err, stdErr.String())
}
fmt.Println("success:", stdOut.String())
}
gexpect
https://github.com/ThomasRooney/gexpect
package main
import (
"fmt"
"log"
"time"
"github.com/ThomasRooney/gexpect"
)
func main() {
cmd := "rsync -avz -e 'ssh -p 22' --delete --timeout=60 --bwlimit=3000 /home/video [email protected]:/root/"
pwd := "yourpassword"
child, err := gexpect.Spawn(cmd)
if err != nil {
log.Fatal("Spawn cmd error ", err)
}
if err := child.ExpectTimeout("password: ", 10*time.Second); err != nil {
log.Fatal("Expect timieout error ", err)
}
if err := child.SendLine(pwd); err != nil {
log.Fatal("SendLine password error ", err)
}
if err := child.Wait(); err != nil {
log.Fatal("Wait error: ", err)
}
fmt.Println("Success")
}
以上是关于GoLang执行需要输入密码的命令的主要内容,如果未能解决你的问题,请参考以下文章