Search code examples
windowssshopensshngrok

Unable to SSH to a Windows machine using Ngrok


I'm trying to connect to Windows user through SSH (public key authentication) from a remote machine over the internet using ngrok. But apparently not working.

Here are what I have done.

I installed and activated the SSH on the windows.

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

I generated public key files and sent to the remote machine to ssh from.

ssh-keygen

I changed/added following lines in the SSH setting file "C:\ProgramData\ssh\sshd_config"

PermitRootLogin yes
AllowUsers otheruser
PubkeyAuthentication yes 
PasswordAuthentication no 

I restarted the ssh server to apply the setting changes.

net stop sshd ; net start sshd

I installed ngrok and run ngrok

./ngrok tcp 22
# got "6.tcp.ngrok.io:25252"

I tried to ssh from the remote machine to the windows machine, using the "tmp" secret key file to the user "tmp".

ssh -i "C:\pg\.ssh\tmp" tmp@6.tcp.ngrok.io -p 25252

and failed.

ssh -i "C:\pg\.ssh\tmp" tmp@6.tcp.ngrok.io -p 25252
Enter passphrase for key 'C:\pg\.ssh\tmp':
tmp@6.tcp.ngrok.io: Permission denied (publickey,keyboard-interactive).

Solution

  • SSH to Windows is kind of waste of time. Their document https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement is outdated https://github.com/MicrosoftDocs/windowsserverdocs/issues/4598 and no longer works, unfortunately.

    If you're on Windows 10, I suggest using WSL Linux on your Windows 10. It's basically Linux machine on Windows, but also available for the SSH feature. The WSL SSHing does work perfectly as well as you can do on a Linux machine.