How to use Remote-SSH in Windows
对于不太会使用 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
本地连接远程主机
-
配置基于 SSH 密钥的身份验证
-
自定义 SSH 密钥文件名称,使用你自己定义的名称替代
id_rsa-remote-ssh
。ssh-keygen -t rsa -b 4096 -f "HOME\.ssh\id_rsa-remote-ssh"
-
编辑 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 则是私有密钥的相对路径,也可以是绝对路径。 -
将本地的
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"
-
-
VSCode 下按下
F1
调起所有命令面板,运行Remote-SSH: Connect to Host...
选择你上一步配置好的主机,回车连接即可。
遇到的问题
-
在使用方法章节的 1.3 中执行
scp
和ssh
命令时可能会遇到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
删除。
-