Ssh

將 Azure 上的 Windows10 VM 配置為 SSH 伺服器以執行反向隧道

  • September 30, 2021

目的: 使用反向隧道(類似 ngrok 的服務)將在本地機器上執行的 Web 應用程序暴露給外界。

我有一個在 Azure 上執行的 Windows 10 Pro VM。我在那里安裝了 OpenSSH 伺服器,並使用本地埠轉發和動態埠轉發(襪子代理)對其進行了測試。兩者都工作正常。

但我似乎沒有讓反向隧道工作。

這是我在本地機器上使用的命令:

ssh -R 5002:localhost:5002 xx.xx.xx.xxx

其中,xx.xx.xx.xxx 是 Azure 上 Win10 VM 的公共 IP。5002 是我的 Web 應用程序在本地電腦上執行的埠,我還想為 Azure VM 保留相同的埠。

上面的命令提示我輸入密碼,輸入後在終端上顯示如下提示,這可能表示連接成功。

me@VMW10Pro C:\Users\me>

但是當我嘗試訪問我的本地執行的 Web 應用程序時,如下所示,沒有任何反應:

https://xx.xx.xx.xxx:5002/myapp

我也試過了,但沒有運氣:

http://xx.xx.xx.xxx:5002/myapp

下面是我為 Azure VM 配置入站埠規則的方法: 在此處輸入圖像描述

以下是出站埠規則的外觀。我什至暫時允許所有埠。 在此處輸入圖像描述

這是sshd_configAzure VM 上的文件。我所做的唯一更改是設置GatewayPortsyes

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey __PROGRAMDATA__/ssh/ssh_host_rsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_dsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ecdsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile  .ssh/authorized_keys

#AuthorizedPrincipalsFile none

# For this to work you will also need host keys in %programData%/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no

#AllowAgentForwarding yes
#AllowTcpForwarding yes
GatewayPorts yes
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#PermitUserEnvironment no
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# override default of no subsystems
Subsystem   sftp    sftp-server.exe

# Example of overriding settings on a per-user basis
#Match User anoncvs
#   AllowTcpForwarding no
#   PermitTTY no
#   ForceCommand cvs server

Match Group administrators
      AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

sshd_config我本地機器上的文件也和上面一樣,GatewayPorts設置為yes.

請注意:我不是網路方面的專家。還有其他教程和操作方法可用於對 Linux VM 執行相同操作。但我只想利用現有的 Windows VM。

任何幫助將非常感激。

我已經想出了解決方案。這是兩方面的:

  1. 我用ssh -R '*:5002:localhost:5002' xx.xx.xx.xxx而不是ssh -R 5002:localhost:5002 xx.xx.xx.xxx. 星號sshd用於偵聽所有介面上的埠 5002。否則它只會在環回介面上監聽。
  2. 我還必須在 Azure Win10 VM 的 Windows Defender 防火牆中允許埠 5002。

這讓它發揮了作用。現在,我可以使用 Azure VM 公共 IP 訪問我在 Internet 上在埠 5002 上本地執行的 Web 應用程序:https://xx.xx.xx.xxx:5002/myapp

注意:按照上面評論中 John Hanley 的建議,我在網路介面 (Azure) 和 VM 作業系統上都啟用了 IP 轉發。但是在應用了上面提到的兩個步驟之後,我禁用了 IP 轉發,看看它是否仍然有效並且確實有效。

引用自:https://serverfault.com/questions/1079102