自动输入要求的密码
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/terminal
,syscall
来自 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
}
我正在 运行创建一个要求我输入密码的 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/terminal
,syscall
来自 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
}