对于不太会使用 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. 常见线程池 newFixedThreadPool 的简单使用

    package com.aaa.threaddemo; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurr ...

  2. jsp 4-14 知识总结

    二   string类型 装换 boolean 的方法? 三   attribute对象  set 和 get  的用法 四  jsp 的四种属性范围? 五  jsp  <%  %>  和 ...

  3. TensorFlow 入门 | iBooker·ApacheCN

    原文:Getting Started with TensorFlow 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活原 ...

  4. Tomcat下 session 持久化问题(重启服务器session 仍然存在)

    感谢大佬:https://www.iteye.com/blog/xiaolongfeixiang-560800 关于在线人数统计,大都使用SessionListener监听器实现. SessionLi ...

  5. Python property动态属性

    from datetime import datetime, date class User: def __init__(self, name, birthday): self.name = name ...

  6. UITextView模拟UITextField 设置Placeholder属性 --董鑫

    由于最近有用到输入框,刚开始考虑的是UITextField,因为它在没有输入的时候可以有提示的Placeholder更能,很人性化,但UITextField只能单行输入,不能跳行,对于一些强迫症的亲来 ...

  7. Ext原码学习之lang-Object.js

    // JavaScript Document (function(){ var TemplateClass = function(){}, ExtObject = Ext.Object = { cha ...

  8. .netcore基础知识(一)

    先来说说web服务器  先来一张图 一个典型的进程外托管模型 我们先看kestrel这一部分 我们在它前面放了一个方向代理服务器nginx 对http请求做预处理 kestrel本身是可以直接用作we ...

  9. Solution -「Gym 102759I」Query On A Tree 17

    \(\mathcal{Description}\)   Link.   给定一棵含 \(n\) 个结点的树,结点 \(1\) 为根,点 \(u\) 初始有点权 \(a_u=0\),维护 \(q\) 次 ...

  10. Solution -「洛谷 P4719」「模板」"动态 DP" & 动态树分治

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个结点的带权树,\(m\) 次单点点权修改,求出每次修改后的带权最大独立集.   \(n,m\le10^5 ...