use tty when IsTerminal is false

pull/8847/head
r_takaishi 6 years ago
parent 4447d28938
commit 0c6249df7f

@ -1,11 +1,10 @@
package ssh
import (
"log"
"os"
"golang.org/x/crypto/ssh"
"golang.org/x/crypto/ssh/terminal"
"log"
"os"
)
func KeyboardInteractive() ssh.KeyboardInteractiveChallenge {
@ -21,7 +20,18 @@ func KeyboardInteractive() ssh.KeyboardInteractiveChallenge {
}
answers := make([]string, len(questions))
for i := range questions {
s, err := terminal.ReadPassword(int(os.Stdin.Fd()))
var fd int
if terminal.IsTerminal(int(os.Stdin.Fd())) {
fd = int(os.Stdin.Fd())
} else {
tty, err := os.Open("/dev/tty")
if err != nil {
return nil, err
}
defer tty.Close()
fd = int(tty.Fd())
}
s, err := terminal.ReadPassword(fd)
if err != nil {
return nil, err
}

Loading…
Cancel
Save