I can reproduce it here:
```
c:\Users\Alex\dev\src\
golang.org\x\crypto\ssh>go test -v -run=TestHandshakeBasic -short -timeout=5s
=== RUN TestHandshakeBasic
panic: test timed out after 5s
goroutine 8 [running]:
testing.startAlarm.func1()
c:/users/alex/dev/go/src/testing/testing.go:1029 +0x100
created by time.goFunc
c:/users/alex/dev/go/src/time/sleep.go:170 +0x4b
goroutine 1 [chan receive]:
testing.(*T).Run(0xc042062dd0, 0x7676f2, 0x12, 0x77d5e0, 0x47f201)
c:/users/alex/dev/go/src/testing/testing.go:702 +0x2fa
testing.runTests.func1(0xc042062dd0)
c:/users/alex/dev/go/src/testing/testing.go:888 +0x6e
testing.tRunner(0xc042062dd0, 0xc042051e10)
c:/users/alex/dev/go/src/testing/testing.go:659 +0x9f
testing.runTests(0xc04216e100, 0x92d700, 0x70, 0x70, 0x94eaa0)
c:/users/alex/dev/go/src/testing/testing.go:886 +0x2bc
testing.(*M).Run(0xc042051f20, 0xc042051f78)
c:/users/alex/dev/go/src/testing/testing.go:828 +0xfe
main.main()
goroutine 19 [chan receive]:
testing.tRunner(0xc042062ea0, 0x77d5e0)
c:/users/alex/dev/go/src/testing/testing.go:659 +0x9f
created by testing.(*T).Run
c:/users/alex/dev/go/src/testing/testing.go:701 +0x2dc
goroutine 21 [chan receive]:
goroutine 4 [chan receive]:
goroutine 5 [chan receive]:
goroutine 6 [chan receive]:
goroutine 7 [IO wait]:
internal/poll.runtime_pollWait(0x2094d80, 0x72, 0x8f0360)
c:/users/alex/dev/go/src/runtime/netpoll.go:173 +0x60
internal/poll.(*pollDesc).wait(0xc042190158, 0x72, 0x8ed348, 0x0)
c:/users/alex/dev/go/src/internal/poll/fd_poll_runtime.go:85 +0xb5
internal/poll.(*ioSrv).ExecIO(0x92e300, 0xc042190018, 0x763b25, 0x7, 0x77d9e0, 0x0, 0xc0421900b8, 0x0)
c:/users/alex/dev/go/src/internal/poll/fd_windows.go:191 +0x10d
internal/poll.(*FD).Read(0xc042190000, 0xc042196000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
c:/users/alex/dev/go/src/internal/poll/fd_windows.go:418 +0x285
net.(*netFD).Read(0xc042190000, 0xc042196000, 0x1000, 0x1000, 0x48b041, 0xc0421900b8, 0x0)
c:/users/alex/dev/go/src/net/fd_windows.go:153 +0x59
net.(*conn).Read(0xc042004010, 0xc042196000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
c:/users/alex/dev/go/src/net/net.go:182 +0x74
bufio.(*Reader).Read(0xc04202e180, 0xc04205d4a1, 0x5, 0x5, 0xc0421900b8, 0xe4dde32526bf9861, 0x6e3ef88f1548bba0)
c:/users/alex/dev/go/src/bufio/bufio.go:213 +0x320
io.ReadAtLeast(0x8ee820, 0xc04202e180, 0xc04205d4a1, 0x5, 0x5, 0x5, 0xc042027c20, 0x40467a, 0xc04202e298)
c:/users/alex/dev/go/src/io/io.go:307 +0xa3
io.ReadFull(0x8ee820, 0xc04202e180, 0xc04205d4a1, 0x5, 0x5, 0xc04200c080, 0x20, 0x0)
c:/users/alex/dev/go/src/io/io.go:325 +0x5f
exit status 2
```
I hope it is helpful enough.
I did not even look at the code, but if you want me to debug this, just let me know.