Win10中使用VSCode + Remote-SSH + Linux服务器远程开发

VSCode + Remote-SSH + Linux服务器远程开发

VSCode新增加一个Remote-SSH插件,它可以用来打开Linux服务器上的的文件夹!!!

VSC 通过 Remote Development 插件连接上远程服务器,然后打开服务器上的文件夹作为workspace。无需将服务器上的各种头文件和源码拷贝到本地上,我们就能使用包括 IntelliSense (completions)code navigationdebugging 在内的各种功能。最后,我们还能使用编辑器内置的终端操纵服务器,去做一些 build、release 这样的事情.

1. 准好本地机器Windows10系统

安装Win10系统, 默认系统会安装OpenSSH, 如果本地机器没有装, 需要专门安装一下, 注意这里需要安装OpenSSH-Client客户端. 并且在Windows中powershell中使用ssh-keygen.exe生成一对公私钥, 存储在C:\Users\brownfeng\.ssh\文件夹中, 具体步骤如下

具体步骤:

本机操作环境:Windows 10 1909(此版本的系统自带SSH)
远程机器环境: Ubuntu18.04

  1. 打开CMD,当前用户命令下:ssh localhost(目的在于创建.ssh目录)
  2. cd进.ssh文件, 调用ssh-keygen: 生成id_rsa(私钥)id_rsa.pub(公钥)
  3. 进入远程Ubuntu操作环境,用户环境下创建[.ssh]文件夹,cd.ssh文件夹,创建文件[authorized_keys]
  4. 在windows机器上使用, scp命令传送id_rsa.pub文件到远程机器:scp [file_path] [username]@[remote-host]:[.ssh路径]
scp C:\Users\ppfor/.ssh/id_rsa.pub [email protected]:/home/brownfeng/.ssh
  1. 登录远程Ubuntu操作环境, 将id_rsa.pub信息导入authorized_keys
  2. cat id_rsa.pub >> authorized_keys
  3. 更改权限
chmod 600 authorized_keys
chmod 700 ~/.ssh
  1. 修改VS code配置文件configWindows环境下路径 ~/.ssh/

2. 在本地机器上安装VSCode

常规插件安装如下:

C/C++
Bracket Pair Colorizer
Chinese (Simplified) ...
CMake
CMake Tools
Trailing Spaces
Indenticator
SFTP

Remote-SSH

其他的配置使用Ctrl+Shift+P,选自setting(JSON)

{
    "remote.SSH.showLoginTerminal": true,
    "window.title": "${dirty}${activeEditorLong}${separator}${rootName}${separator}${appName}",

    "editor.minimap.maxColumn": 40,
    "editor.wordSeparators": "`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?·~!¥…()—【】、;:‘’“”,。《》? ",
    "workbench.sideBar.location": "left",
    "editor.fontFamily": "'Source Code Pro', Consolas, 'Courier New', monospace",
    "editor.detectIndentation": false,
    "editor.tabSize": 2,
    "files.trimTrailingWhitespace": true,
    "files.autoGuessEncoding": true,

    // "C_Cpp.default.intelliSenseMode": "gcc-x64",
    // "C_Cpp.default.includePath": [
    //   "/usr/include",
    //   "/usr/local/include",
    //   "${workspaceFolder}/**"
    // ],
    "C_Cpp.clang_format_fallbackStyle": "Google",
    "cmake.configureOnOpen": true,
    "editor.fontSize": 16,
}

3. 准备好远程Linux机器

这里Linux系统选择的是Ubuntu 18.04版本

这里远程机器可以是使VirtualBox中安装的ubuntu18.04, 也或者是同一个网络中的其他Linux机器. 并且Linux机器上需要如下配置:

  1. 检测ssh服务是否启动: ps -axu | grep ssh, 判断是否有sshd服务
  2. 如果没有sshd服务, 需要用sudo apt-get install openssh-server
  3. 如果没有启动, 也可以使用sudo service ssh start 或者/etc/init.d/ssh resart重启
  4. 将前面windows中创建的id_rsa.pub文件拷贝到linux主机中,然后创建一个文件 -- ~/.ssh/authrized_keys. 同时将id_rsa.pub内容拷贝进入authrized_keys文件
  5. 使用vim /etc/ssh/sshd_config,配置远程Linux主机打开SSH密钥登录设置:PubkeyAuthentication yes
PermitRootLogin yes         #允许root认证登录
PasswordAuthentication yes  #允许密码认证

RSAAuthentication yes       #秘钥认证
PubkeyAuthentication yes    #公钥认证

拷贝方法可以用cat id_rsa.pub >> ~/.ssh/authorized_keys
当有多台本地机器都要连接远程机器怎么办?只用将本地机器的公钥 append 到 authorized_keys 中就行。

4. 开始远程连接

在Windows机器上打开VSCode, 然后点击界面最左边的 Remote-SSH, 然后点击点击左上方 CONNECTION 窗口中的蓝字 Configure,并选择包含 .ssh\config 的配置文件, 并且在配置文件中填入:

Host Ubuntu
  # 这里填入要在远程主机上登录的用户名
  User brownfeng
  # 这里填入远程主机 IP
  HostName 192.168.x.xxx
  # 这里填入远程主机 ssh 端口
  Port 22
  # 这里填你私钥的路径
  IdentityFile c:\Users\brownfeng\.ssh\id_rsa
  # 当需要跳板机的时候就要填这个了
  # 这里代理类型根据需求填 socks4、socks5 或 http
  # 这里 xxx.xxx.xxx.xxx:xxx 表示跳板机 IP:端口
  # 这里 %h %p 无需修改,将自动分别读取 HostName 和 Port 的配置并填入
  #ProxyCommand C:\bin\nmap-7.70\ncat.exe --proxy-type http #--proxy xxx.xxx.xxx.xxx:xxx %h %p

注意: Windows 10 的 openSSH 里没有自带的用于支持 ProxyCommand 的工具,所以我们需要额外下载 ncat.exe 或 connect.exe。由于笔者在尝试 connect.exe 的时候遇到了无从解决的错误,所以这里仅介绍了 ncat.exe 的使用方式。这里假设你下载了(传送门)并解压到了 c:\bin。所以你可以通过 C:\bin\nmap-7.70\ncat.exe 找到 ncat.exe。

此时已经在VSCode中重启打开窗口,远程连接上了Linux中的内容.

其他参考

参考

https://zhuanlan.zhihu.com/p/100759746
https://blog.csdn.net/sixdaycoder/article/details/89850064
https://blog.csdn.net/maokelong95/article/details/91801944
https://www.zhihu.com/question/30315894/answer/928959062
https://www.baidu.com/link?url=2S1ImETasuzCgi_1SzolRpvTlC-9g5Ma2jTPd7kTez834S-GicesjpUbJIK-Z9I9&wd=&eqid=dbdfd12f00056500000000055e3fe011

你可能感兴趣的:(Win10中使用VSCode + Remote-SSH + Linux服务器远程开发)