前面写了《使用Visual Studio 2019进行嵌入式Linux开发》和《通过samba实现linux与windows共享文件》,两者都没有达到自己理想的程度。Visual Studio 2019似乎只支持CMake,个头也比较大,Samba+source insight的方式,又还要一个终端工具,不够方便(屏幕尺寸大或多个显示器的当我没说)。VS Code V1.35增加VS Code Remote之后,直觉告诉自己,这就是我想要的。
下文将一步步指导你使用Visual Studio Code Remote - SSH扩展连接到Linux虚拟机并通过一个简单的Hello world
例程来展示如何使用它。
注意:本文不打算介绍具体如何搭建一个Linux虚拟机及相关的开发环境搭建,所使用的Linux可以装在本地主机、本地局域网或者云服务器上,但是需要满足一些条件!!!
Linux系统要求
尽量选择使用最近发布的稳定版或者LTS版本:
- Ubuntu 64-bit x86 (16.04+)
- Debian 64-bit x86 (8+)
- CentOS / RHEL 64-bit x86 (7+)
这几个发行版安装后不需要解决额外的依赖便可以保证VS Code Remote Development扩展正常工作。这里我使用Ubuntu 18.04 64-bit
,如果选择其它的版本,可以查看该本版需要解决哪些依赖。
安装OpenSSH for Windows
Windows10
Windows 10 1809及之后的版本已经添加OpenSSH,可以在“设置-应用-应用和功能-管理可选功能-添加功能”中找到并完成安装。
如果不行,可以按照下面步骤在PowerShell中安装:
- 1、查询
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
# This should return the following output:
Name : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
- 2、安装服务器和/或客户端功能
# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# Both of these should return the following output:
Path :
Online : True
RestartNeeded : False
3、SSH 服务器的初始配置
首次使用,以管理员身份启动 PowerShell,然后运行以下命令来启动 SSHD 服务
Start-Service sshd
# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'
# Confirm the Firewall rule is configured. It should be created automatically by setup.
Get-NetFirewallRule -Name *ssh*
# There should be a firewall rule named "OpenSSH-Server-In-TCP", which should be enabled
# If the firewall does not exist, create one
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
其它版本
(这里是在win7下执行)参考下面的步骤进行安装:
- 下载最新版本的OpenSSH
- 将下载好的文件解压到
C:\Program Files\OpenSSH
路径下(可能需要管理员权限) - 打开命令行窗口并进入上一步的路径下,执行下面语句进行安装
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
- 设置防火墙,允许SSH连接
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
- 启动sshd,这一步会在
%programdata%\ssh
下生成keynet start sshd
- 设置sshd服务自动启动
Set-Service sshd -StartupType Automatic
安装Remote Development扩展
Remote Development扩展包包含 SSH、Containers和WSL三大部分,其实我们只用到SSH。Windows10下remote-ssh V0.50的设置
Windows10下配置文件路径默认有两个,一个 C:\ProgramData\ssh
,另一个是 C:\Users\tianxiao\.ssh
,由于Windows10的权限问题,这里使用 C:\ProgramData\ssh
下的配置文件,另一个留给命令行程序用。
此外,还需要指定使用的openssh的路径,不然会报错的
连接远程主机
1、不认证方式连接
- 配置SSH客户端:
Host
后面跟着的是别名,怎么好记怎么取; -
连接Linux虚拟机
- 输入密码并按回车键,这一步一共有两次,比较麻烦
-
连接成功
-
断开连接
2、认证方式连接
前面的连接方式每次连接时都要输入两次密码,比较麻烦,而认证方式只要配置好就可以直接连接了。
- 生成SSH密钥对:在命令行下执行
ssh-keygen -t rsa -b 4096
,后面三个提示都敲回车,选择默认配置 - 将本地公钥(id_rsa.pub文件)的内容添加到SSH主机上的authorized_keys文件中:
SET REMOTEHOST=ubuntu@192.168.196.132
scp %USERPROFILE%\.ssh\id_rsa.pub %REMOTEHOST%:~/tmp.pub
ssh %REMOTEHOST% "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat ~/tmp.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && rm -f ~/tmp.pub"
执行后面两条指令时需要输入相应的密码,因为当前还是使用非认证的方式访问现在再次连接Linux主机就不需要输入密码了,直接就连接成功!!!
连接成功的效果
-
菜单栏:文件-打开文件,弹出选择文件窗口,可以用鼠标操作选择要打开的文件或文件夹
-
菜单栏:终端-新建终端,可以看到默认处于当前用户目录下
-
实战“hello world”
唯一的遗憾就是没有新建文件夹了,得在终端建好文件夹,然后进去之后就像在本地一样建立文件、编码。