m/c/metroctl: clean up ssh terminal handling

Drop deprecated x/crypto/ssh/terminal package.  It's replacement is
already used in the same package.  Consistently use syscall.Stdin and
cast it to int to be compatible with Windows.  This is a no-op on
Unix-style platforms.

Change-Id: I727a51a6aae6e57e4133ab5969db77af013ba78f
Reviewed-on: https://review.monogon.dev/c/monogon/+/3699
Vouch-Run-CI: Lorenz Brun <lorenz@monogon.tech>
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
diff --git a/metropolis/cli/metroctl/cmd_install_ssh.go b/metropolis/cli/metroctl/cmd_install_ssh.go
index 8c6f6ad..f779f43 100644
--- a/metropolis/cli/metroctl/cmd_install_ssh.go
+++ b/metropolis/cli/metroctl/cmd_install_ssh.go
@@ -17,7 +17,6 @@
 	"github.com/spf13/cobra"
 	xssh "golang.org/x/crypto/ssh"
 	"golang.org/x/crypto/ssh/agent"
-	"golang.org/x/crypto/ssh/terminal"
 	"golang.org/x/term"
 	"google.golang.org/protobuf/proto"
 
@@ -55,11 +54,14 @@
 			log.Println("ssh agent authentication will not be available.")
 		}
 
-		if term.IsTerminal(int(os.Stdin.Fd())) {
+		// On Windows syscall.Stdin is a handle and needs to be cast to an
+		// int for term.
+		stdin := int(syscall.Stdin) // nolint:unconvert
+		if term.IsTerminal(stdin) {
 			authMethods = append(authMethods,
 				xssh.PasswordCallback(func() (string, error) {
 					fmt.Printf("%s@%s's password: ", user, address)
-					b, err := terminal.ReadPassword(syscall.Stdin)
+					b, err := term.ReadPassword(stdin)
 					if err != nil {
 						return "", err
 					}
@@ -75,7 +77,7 @@
 								return nil, err
 							}
 						} else {
-							b, err := terminal.ReadPassword(syscall.Stdin)
+							b, err := term.ReadPassword(stdin)
 							if err != nil {
 								return nil, err
 							}