前言
在远程调试Windows服务器端的代码时,如果直接通过远程桌面连接在服务器电脑上更改,需要在服务器上也下载VSCode程序,而且有可能会出现卡顿。更高效的的服务器编程方案是通过本地的VSCode连接远程服务器,直接在本地修改远程服务器的文件。
VSCode的远程连接方法包括隧道连接和SSH连接等方法。隧道连接方法很简单,只需要在客户端和服务器端的VSCode登录相同微软账号或Github账号,服务器端左下角点击用户图标打开远程隧道访问,即可在客户端远程连接。这种方法最后以VSCode提供的网页端的形式打开服务器的文件,也可以使用一些浏览器插件将网页添加为应用程序打开。SSH连接方法更为主流,在本地的VSCode上使用Remote-SSH服务连接到服务器,这种方法可以在本地VSCode程序中打开服务器文件。
网上大部分相关教程都是采用SSH方法进行连接,但Windows服务器通常没有安装Remote-SSH服务,直接在VSCode上连接是连接不上的,而这些教程没有给出Windows系统下SSH的安装方法。这篇文章主要介绍SSH的安装和连接测试。
还有一个区别是SSH连接能在本地VSCode打开而不用打开网页,所以UI更好看一点点,而且可以看到本地的美少女壁纸×
安装与连接
首先检查要远程连接的服务器是否安装了SSH,在Powershell里运行命令:
Get-WindowsCapability -Online | Where-Object Name -like "OpenSSH*"
如果运行结果如下所示:
PS C:\Users\Administrator> Get-WindowsCapability -Online | Where-Object Name -like "OpenSSH*"
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
则说明OpenSSH.Client已经安装了,可以作为客户端连接;但OpenSSH.Client还未安装,不能作为服务端连接。如果两项均显示“Installed”,则可以跳过安装步骤。在Powershell里运行以下命令进行安装:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
启动服务:
Start-Service sshd
设置开机自启:
Set-Service -Name sshd -StartupType Automatic
检察服务是否启动:
Get-Service sshd
Status显示Running,说明启动成功了!SSH服务的默认监听端口为22,检查该端口是否被占用:
netstat -an | findstr :22
如果输出:
TCP 0.0.0.0:22 0.0.0.0:0 LISTENING
则说明22端口正在被SSH服务监听。腾讯云轻量应用服务器防火墙的22端口默认是开放的,若使用其他服务器,可以在服务器控制台的防火墙(或安全组)里检查是否开放。操作系统防火墙也最好用以下命令开放22端口:
New-NetFirewallRule -DisplayName "Allow SSH" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow
接下来可以先尝试在本地终端里使用SSH连接服务器,连接前客户端电脑也要安装OpenSSH,可以参考服务器的安装命令进行安装,命令里的“Server”改为“Client”。安装后若没有报错就可以在本地执行SSH命令了,这里仍然建议在Powershell里运行。SSH远程连接命令为:
ssh username@your-server-ip -p 22
其中,username是服务器端的用户名,默认为Administrator。如果连接的是个人电脑,且使用微软账户登录,则username是微软账号邮箱。连接时可能提示The authenticity of host ‘*****’ can’t be established,根据提示输入yes就行了。然后按提示输入密码,注意不是电脑pin码,而是账户密码。
输入密码后可能会出现“Permission denied, please try again.”或者“Permission denied (publickey,password,keyboard-interactive)”的情况,在检查确认账号密码无误后,可以尝试修改SSH配置文件来解决(至少我是这样解决的)。输入命令打开sshd_config配置文件:
notepad C:\ProgramData\ssh\sshd_config
全选替换为以下内容:
Port 22
ListenAddress 0.0.0.0
PasswordAuthentication yes
PubkeyAuthentication yes
保存并退出,重新尝试SSH连接,如果输入密码后显示如下,则说明连接成功了。
administrator@your_server_ip C:\Users\Administrator>
接下来应该就可以正常在VSCode里连接了,关于这里的细节网上有很多教程,可以参考文末的链接。在VSCode里安装Remote-SSH插件,点击左侧左侧选项卡远程资源管理器选项,新增一个SSH的远程连接,连接命令和刚刚在Powershell里的命令完全一样,之后选择操作系统并按提示输入密码就可以了。
