自动输入要求的密码

Automatically enter the requested password

我正在 运行创建一个要求我输入密码的 Go 程序。

脚本本身就是这样完成的:

fmt.Print("Enter password: ")
bytePassword, err := terminal.ReadPassword(int(syscall.Stdin))
if err != nil {
    return
}
password := string(bytePassword)

terminal 来自 golang.org/x/crypto/ssh/terminalsyscall 来自 syscall 模块。

我尝试 运行 脚本如下:

echo "mypassword" | ./myscript

但它不起作用(它以正常方式起作用,当我在询问时手动输入密码时)

如何在此处自动输入密码?我以为我做对了,但显然不是。

以下是我使用 expect 包裹在 bash 脚本中的方法:

#!/bin/bash

PASS=secret_pass
CMND=YOUR_COMMAND

expect << EOF
spawn  $CMND
expect {
    "assword:" { send "$PASS\n" }
}
EOF

这是我的 ssh_yes 项目中的一个工作示例:

ssh_yes() {
assword='
    "assword:" { %s }
    "$ "       { send "exit\n" }
'
[[  ]] && pass="send \"\n\"" || pass="exit"
printf -v assword "$assword" "$pass"
expect <<  EOF
spawn  ssh 
expect {
    "yes/no" {
        send "yes\n"
        expect { $assword }
    }
    $assword
}
EOF
}