使用VSCode SSH工具进行远端Linux服务器开发,以及常见问题解决方案
SSH客户端设置 安装openssh-clien 生成私钥 SSH服务器设置 安装openssh-server 新建公钥认证文件,复制公钥内容 修改sshd\config配置文件,禁止密码登录,允许公钥私钥登录,重启服务
一、简要步骤
SSH客户端设置
- 安装openssh-clien
- 生成私钥
SSH服务器设置
- 安装openssh-server
- 新建公钥认证文件,复制公钥内容
- 修改sshd_config配置文件,禁止密码登录,允许公钥私钥登录,重启服务
VS Code设置
- 安装SSH插件
- 设置 ssh的配置文件config
二、SSH客户端配置
我的SSH客户端为win10,需要安装openSSH-client,在设置 → 应用和功能 → 可选功能 → OpenSSH客户端 ,安装后在终端测试

三、SSH服务器配置
1. 启动ssh服务
我的SSH服务器为Ubuntu,需要先检查是否安装Openssh-Server,若没有则安装,之后启动服务
# 默认只安装openssh-client
dekg -l | grep ssh
# 安装openssh-server
sudo apt install openssh-server
# 确认openssh-server是否启动, 若看到有sshd则说明已经启动服务
ps -e | grep ssh
# 如没有则可以手动启动服务
service ssh start
默认的ssh服务端口为22 ,后续我们可以更改
2. 允许root用户密码登录
一般情况下,我们在虚拟机中创建的ubuntu系统是开放root用户的ssh登录权限,而物理机的ubuntu系统可能更为严格,禁止root用户的ssh登录权限,所以我们有必要检查下root用户远程登录权限,这里为前期方便设置,开启root的ssh登录功能。 安装ssh-server后,它的配置文件位于 /etc/ssh/sshd_config ,我们需要做如下设置
PermitRootLogin prohibit-password这个设置表示禁止root用户使用密码登录,需要注释掉PasswordAuthenticatios yes允许密码登录,取消注释PermitRootLogis yes允许root用户密码登录,默认是没有这一行的,需要手动添加上
使用命令行如下
# 切换到root用户
su root
# 使用vi编辑器打开sshd_config文件
vim /etc/ssh/sshd_config
# 在编辑器中使用修改参数,参考vi用法 https://www.runoob.com/linux/linux-vim.html
# PermitRootLogin prohibit-password
PermitRootLogis yes
PasswordAuthenticatios yes
# :wq 保存变更退出
# 重启ssh服务
service ssh restart
四、VS Code配置
1. cmd检查ssh账户登录
我们在客户端使用VSCode进行开发。 在VSCode配置前,可以用cmd命令行尝试连接,若cmd命令行没有问题则说明SSH客户端没有错误,反之我们就需要检查看看SSH客户端或者服务端哪里出错,这里测试普通用户和root用户
# username为用户名称, host为ip地址或者计算机域名
ssh username@host


测试都没有问题后可以在VSCode中配置
2. 下载SSH插件
需要安装以下SSH插件
Remote - SSH- 主插件,提供基本的ssh连接工具Remote - SSH: Editing Configuration Files可以编辑保存客户端的ssh配置文件,避免每次手动输入Remote Developmentssh连接后可以打开远程机器上的任意文件夹或文件


打开后,编辑config文件内容
# your_host_alias 连接机器的别名,最好英文
# ip_adrass 连接机器的ip地址或者域名
Host your_host_alias
HostName ip_adrass
Port 22
User root
关闭后就会出现机器别名图标,右键连接,可以选择在当前窗口打开还是在新窗口打开

确定后,需要输入登录用户的密码,之后VSCode会在 /tmp目录初始化一系列操作

连接成功后可以在终端测试
4. 打开远程机器文件夹和文件
说实话,默认命令行编辑文本实在是痛苦,不要和我说vim 大法好,要是真的好何不直接汇编呢,我觉得好的工具直接手动在界面编辑多快,何必费大力气在学习曲线如此陡峭的vim上呢? 另外在文件路径切换也很麻烦,你不可能记住每个文件的路径,查询也相当耗费时间。 好在VSCode可以完美解决这两个问题
- 在Toc显示远程机器的目录树
- 可以在编辑界面直接打开保存文本
显示远程机器目录树,我们直接打开文件夹,这时默认在远程机器的用户根目录,换到系统根目录,确定后需要再输入一次用户密码,之后就看到远程机器的根目录

打开/etc/ssh/sshd_config 测试,可以直接在右侧编辑器修改保存,多方便!😁

复制路径,在终端使用,再也不用来回切换了!😎

当然还有许多其他方便功能,这里不一一赘述!
五、免密登录和端口修改
上几步中我们每次登录都需要输入密码,感觉有些不是很方便😒,同时默认端口和root用户登录最好也要更改,为了安全性我们需要做如下更改:
- 允许root免密登录,并且禁止密码登录,
- 修改默认ssh端口
VSCode里建议使用root用户操作,因为如果我们用的是其他用户,登录时就是该用户的权限,即使后来在终端中赋予其root权限,有时候还是无法在编辑器修改或者编辑部分文件
1. 免密登录和端口修改
Windows客户端生成密钥对,默认执行命令即可,这里使用常用的rsa算法,公钥为vm_rsa,私钥为vm_rsa.pub
ssh-keygen -t rsa -f C:\Users\chao9441\.ssh\vm_rsa
在Linux服务器创建认证文件,位于root根目录, /root/.ssh/authorized_keys , 直接VSCode右键创建文件夹和文件,将vm_rsa.pub 文本内容复制进去

设置Linux ssh配置文件 /etc/ssh/sshd_config ,修改ssh登录权限 ,需要修改的选项如下,保存后退出
# 选项
PermitRootLogin yes # 允许root用户登录,这里的意思是使用公钥私钥登录,没有则添加这行
PermitRootLogin prohibit-password # 不允许root用户使用密码登录
PasswordAuthentication no # 不允许用户名密码认证
PubkeyAuthentication yes # 允许公钥认证
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 # 默认认证文件位置
Port 22 # 支持两个端口,万一登录不上可以用原来默认的, 没问题可以注释掉
Port 2000 # 支持两个端口,万一登录不上可以用原来默认的

防火墙开放 2000端口
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 2000 -j ACCEPT
一定要记得重启ssh服务
service ssh restart
2. VSCode免密连接
在VSCode中断开服务器连接,修改客户端ssh的配置文件 C:\Users\chao9441\.ssh\config
# your_host_alias 连接机器的别名,最好英文
# ip_adrass 连接机器的ip地址或者域名
# IdentityFile 私钥位置
Host your_host_alias
HostName ip_adrass
Port 2000
User root
IdentityFile C:\Users\chao9441\.ssh\vm_rsa
之后就可以直接登录,无需输入密码!相当的快捷方便!😎,看看效果

六、常见问题
VSCode无法连接SSH机器
检查步骤
- cmd是否可以正常连接,若cmd不能正常则连接说明不是VS问题,假如cmd不能连接
- ssh客户端
- 确认在App可选功能里安装openssh-client,
- 有可能是known_hosts文件检查出错,路径
C:\Users\chao9441\.ssh\known_hosts,可以删除后尝试 - 也有可能windows防火墙阻止了,可以开启监听端口 https://www.cnblogs.com/mihoutao/p/13254520.html
- ssh服务端
- 确认安装open-server,并且服务已经启动
- 确认ssh端口是否为22,有些服务器可能默认端口不是22
- 如果root用户不能连接,需要修改配置文件允许用户密码登录
- 修改sshd_config后没有重新启动ssh服务
- 检测ssh端口是否被防火墙阻拦,开放ssh端口
- ssh客户端
- cmd是否可以正常连接,若cmd正常则连接说明是VS问题,假如cmd能够正常连接
- 以管理员方式运行VS Code,再次尝试
参考资料
又是学习进步的一天~~ 😁