对于不太会使用 Vim 的我来说,在服务器上用 Vim 去修改 nginx.conf 实在有点麻烦,比如没有高亮和格式化。正好想起前不久微软发布了远程开发工具包,其中一个就是今天要介绍的 Remote-SSH。下面是官方对该扩展的定义:

The Remote - SSH extension lets you use any remote machine with a SSH server as your development environment. This can greatly simplify development and troubleshooting in a wide variety of situations.

因此用来修改 nginx.conf 也是符合其目标的。

执行环境

  • Windows 10
  • Powershell Core 6.2.0
  • Visual Studio Code Insiders:因为 Remote-SSH 还在 Preview 阶段,只能开发版的 VSCode 中使用。
  • 远程 Linux 主机

使用方法

在 Remote-SSH 扩展的介绍页面下其实是有一个快速开始文档的,简单来说就是在成功安装该扩展之后,需要配置服务端和本地客户端的环境。

在服务器上安装 SSH 服务

同样有文档

  • Debian / Ubuntu

    Run sudo apt-get install openssh-server
  • RHEL / Fedora / CentOS

    Run sudo yum install openssh-server && sudo systemctl start sshd.service && sudo systemctl enable sshd.service

本地连接远程主机

  1. 配置基于 SSH 密钥的身份验证

    1. 自定义 SSH 密钥文件名称,使用你自己定义的名称替代 id_rsa-remote-ssh

      ssh-keygen -t rsa -b 4096 -f "HOME\.ssh\id_rsa-remote-ssh"
    2. 编辑 SSH config 文件,添加以下代码。

      Host name-of-ssh-host-here
      HostName your-fqdn-or-ip-goes-here
      User your-user-name-on-host
      IdentityFile ~/.ssh/id_rsa_remote-ssh

      Host 仅仅是远程服务器主机的名称,我取的是 CentOS;HostName 是你的远程服务器 IP 地址;User 是登录用户名称,比如 root;IdentityFile 则是私有密钥的相对路径,也可以是绝对路径。

    3. 将本地的 id_rsa-remote-ssh.pub 的内容追加到远程服务器的 authorized_keys 文件里。

      # 将`name-of-ssh-host-here`替换成你第二步里面的Host后面的值即可,这里可以用单引号或者双引号
      $REMOTEHOST='name-of-ssh-host-here' # 这里一定要使用双引号
      $PATHOFIDENTITYFILE="$HOME\.ssh\id_rsa-remote-ssh.pub" # scp 是 linux 系统下基于 SSH 登陆进行安全的远程文件拷贝命令。这里把本地的公开密钥复制到服务器端的`~/tmp.pub`中。该命令运行之后需要输入服务器登录密码。
      scp $PATHOFIDENTITYFILE "$REMOTEHOST`:~/tmp.pub" # 通过 SSH 向服务器执行以下一组命令,执行成功后本地的密钥就被追加到服务器的`~/.ssh/authorized_keys`文件里。
      ssh $REMOTEHOST "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat ~/tmp.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && rm -f ~/tmp.pub"

      以上是初次添加公钥时需要对~/.ssh设置了权限。以后再添加其他机器的公钥就不需要执行chmod操作了,直接将公钥追加到authorized_keys文件即可。

      ssh $REMOTEHOST "cat ~/tmp.pub >> ~/.ssh/authorized_keys && rm -f ~/tmp.pub"
  2. VSCode 下按下 F1 调起所有命令面板,运行 Remote-SSH: Connect to Host... 选择你上一步配置好的主机,回车连接即可。

遇到的问题

  1. 在使用方法章节的 1.3 中执行 scpssh 命令时可能会遇到 Permission denied 的问题。把 Powershell 以管理员身份运行也报同样的错误。请执行以下命令,看看是否存在多个相同命名的可执行文件。

    where.exe scp
    
    # 我的输出:
    # C:\Windows\System32\OpenSSH\scp.exe
    # D:\Scoop\shims\scp.exe where.exe ssh
    # 我的输出:
    # C:\Windows\System32\OpenSSH\ssh.exe
    # D:\Scoop\shims\ssh.exe

    如果存在,那么优先或默认会使用前一个可执行文件(System32/OpenSSH下的scp),结果我们已经知道,会报“权限不足”的错误。当我使用后一个可执行文件(Scoop/shims下的scp)时,竟然成功了。

    解决办法有两种:

    • 使用scp时,把路径打全。ssh同理。

      D:\scoop\shims\scp.exe $PATHOFIDENTITYFILE "$REMOTEHOST`:~/tmp.pub"
    • 把系统环境变量PATH里的C:\Windows\System32\OpenSSH删除。

How to use Remote-SSH in Windows的更多相关文章

  1. windows 10使用vscode进行远程代码开发 | tutorial to use vscode for remote development using ssh on windows

    本文首发于个人博客https://kezunlin.me/post/c93b6ba6/,欢迎阅读最新内容! tutorial to use vscode for remote development ...

  2. Java ssh 访问windows/Linux

     Java ssh 访问windows/Linux 工作中遇到的问题: Java code运行在一台机器上,需要远程到linux的机器同时执行多种命令.原来采用的方法是直接调用ssh命令或者调用pli ...

  3. Jenkins踩坑系列--你试过linux主机ssh登录windows,启动java进程吗,来试试吧

    一.问题概述 在一个多月前,组长让我研究下持续集成.我很自然地选择了jenkins.当时,(包括现在也是),部分服务器用的是windows主机. 我当时想了想,如果我把jenkins装在windows ...

  4. VS Code Remote SSH设置

    本文翻译自:5 Steps: Setup VS Code for Remote Development via SSH from Windows to Linux system 5个步骤:设置VS代码 ...

  5. The remote SSH server rejected X11 forwarding request

    两台相同的虚拟机,一台没有错误,一个经常出现警告,内容如下所示: The remote SSH server rejected X11 forwarding request 找了很多方法,最后发现是安 ...

  6. How to configure ODBC DSN in Client to access remote DB2 for Windows

      How to configure ODBC DSN in Client to access remote DB2 for Windows MA Gen feng (Guangdong Unito ...

  7. Xshell报错“The remote SSH server rejected X11 forwarding request.”

    Xshell报错“The remote SSH server rejected X11 forwarding request.” 2012年12月17日 ⁄ Linux⁄ 共 218字 ⁄ 字号 小  ...

  8. Xshell 连接虚拟机出现 "The remote SSH server rejected X11 forwarding request"

    1. 描述 虚拟机:VirtualBox Linux: centOS7 解决了 centOS7在VirtualBox中装好后的网络连接问题 后,用 Xshell 连接服务器时出现下面情况: 2. ss ...

  9. 解决 Xshell 连接出现 The remote SSH server rejected X11 forwarding request 问题

    问题描述 使用 Xshell 5 首次连接虚拟机 CentOS 7.6 出现这样的提示: WARNING! The remote SSH server rejected X11 forwarding ...

  10. 解决"The remote SSH server rejected X11 forwarding request"问题

    今天突然想起来好久没有登录我的vps了,于是下载了xshell,填入地址登录后,看到提示"WARNING! The remote SSH server rejected X11 forwar ...

随机推荐

  1. 洛谷 8 月月赛 & 「PMOI」Round · 04

    T1 T166167 「PMOI-4」人赢 题目大意 给一个数列的前两项分别为\(n\)和\(m\) 当\(i\geq3\)时\(a_i = a_{i-1}*a_{i-2}\)的个位 给定\(n\), ...

  2. Shell之sed编辑器

    Shell之sed编辑器 目录 Shell之sed编辑器 一.sed编辑器 1. sed编辑器概述 2. sed编辑器的工作流程 二.sed命令 1. 命令格式 2. 常用选项 3. 常用操作 三.操 ...

  3. Scala函数高级篇

    一.匿名函数 没有名字的函数就是匿名函数,格式:(x:Int)=>{函数体} x:表示输入参数类型:Int:表示输入参数类型:函数体:表示具体代码逻辑 传递匿名函数至简原则: 参数的类型可以省略 ...

  4. linux_20

    总结tomcat优化方法 java程序出现oom如何解决?什么场景下会出现oom? 简述redis特点及其应用场景 对比redis的RDB.AOF模式的优缺点 实现redis哨兵,模拟master故障 ...

  5. Ubuntu service 命令

    启动指定服务 sudo service 服务名 start 停止指定服务 sudo service 服务名 stop 重启指定服务 sudo service 服务名 start 查看所有服务 sudo ...

  6. Jest_JavaScript测试框架

    Jest是一个JavaScript测试框架,由Facebook用来测试所有JavaScript代码,包括React应用程序. 不同级别的自动化测试:单元.集成.组件和功能. 单元测试可以看作是和在组件 ...

  7. Vue 组件库:Element

    目录 Element 介绍 什么是 Element ? Element 快速入门 Element 常用组件 基础布局 容器布局 表单组件 表格组件 顶部导航栏组件 侧边导航栏组件 Element 介绍 ...

  8. 如何在 Xamarin 中快速集成 Android 版认证服务 - 邮箱地址篇

    Xamarin 作为微软提供的移动服务多系统开发平台,成为很多开发者首选的应用开发平台.AppGallery Connect(以下简称 AGC)也在逐步的支持 Xamarin 的 SDK.认证服务也是 ...

  9. k8s笔记--驱逐与重调度,以及deschueduler的一次实验

    在Kubernetes中,调度是指将Pod放置到合适的Node上,然后对应的Node上的Kubelet才能够运行这些pod.调度器通过Kubernetes的监测机制来发现集群中新创建且尚未被调度的No ...

  10. 07.python语法入门--流程控制

    分支结构 什么是分支结构 为什么要用分支结构 如何使用分支结构 if语法 if应用案例 循环结构 什么是循环结构 为什么要用循环结构 如何使用循环结构 while循环语法 while循环应用案例 fo ...