VScode SSH远程连接Ubuntu(通过SSH密钥对的方式)

我们都知道在VScode上通过SSH插件的方式可以远程连接到虚拟机的Ubuntu系统,这样开发者就可以在Windows下的Vscode编译器下直接远程连接Ubuntu,这种方式是 "用 Windows 的便捷性操作 Linux 的专业性"------ 既保留了Windows系统的易用性和VS Code的强大功能,又能充分利用 Ubuntu(Linux)在开发、部署场景中的优势,是跨系统开发的高效解决方案。

常规的使用SSH Remote插件远程连接Ubuntu使用密钥认证的方式,从使用便捷性来说,每次登录都需手动输入密码,无法完全自动化;如果存在多台服务器,每台服务器需单独设置并记忆密码,管理成本高;从安全性的角度来考虑,如果采用弱密码,每次登录需要输入,存在被截获并破解的可能;而且如果生产过程中需要通过脚本完成定时的自动化任务,通过SSH密钥对的方式无需进行交互登录,毕竟脚本无法自动输入密码。

说人话就是每次重新连接不需要我们手动输入密码,爽~

那这种又安全又高效又支持自动化的连接方式是如何实现的呢?

一、 准备工作

  1. 确保 Ubuntu 虚拟机已安装 SSH 服务

在 Ubuntu 虚拟机中打开终端,执行以下命令安装并启动 SSH 服务:

复制代码
# 安装 OpenSSH 服务器
sudo apt update
sudo apt install openssh-server

# 启动 SSH 服务
sudo service ssh start

# 设置开机自启
sudo systemctl enable ssh

我这里已经安装过openssh-server了,所以我这里显示"openssh-server is already the newest version (1:8.2p1-4ubuntu0.13)."

  1. 查看ubuntu的IP地址

为了方便使用,虚拟机最好是设置为桥接模式而非NAT模式。如果不知道自己是什么模式可以通过查看ubuntu网卡的IP地址与主机的IP地址是否在同一网段来进行简单的判断。

桥接模式只需要保证SSH默认端口22开放,主机即可直接通过虚拟机 IP 连接;而NAT模式需额外配置端口转发才能实现 SSH 连接。

桥接模式 NAT 模式
IP 网段 与主机同网段(如 192.168.x.x 私有网段(如 10.0.2.x),与主机隔离
SSH 连接方式 直接通过虚拟机 IP 连接(ssh user@虚拟机IP 需端口转发,通过 主机IP:映射端口 连接(如 ssh user@主机IP -p 2222
网络可达性 主机、局域网设备均可直接访问 仅主机可通过端口转发访问,局域网其他设备默认不可达
IP 稳定性 可能随路由器 DHCP 动态变化(建议设静态 IP) 由虚拟机软件分配,稳定性高(除非重启 NAT 服务)
配置复杂度 简单(无需额外设置,确保防火墙开放 22 端口) 需手动配置端口转发规则,否则无法连接

在命令行终端输入:

复制代码
#查看网络接口状态
ifconfig

即可查看到ubuntu的网卡对应的IP地址信息:

3.在Windows上的VScode插件市场中安装SSH插件

在插件市场中搜索关键字SSH,跳出来的第一个插件就是我们需要的Remote SSH插件,我这里已经安装过了,没有安装该插件的右下角应该是"Install"按钮。

二、确保网络连接状态

最简单的测试网络连接状态的方式就是互相ping一下,在第一步中我们已经拿到了Ubuntu的IP地址,类似的我们可以得到Windows的IP地址。

在Windows下使用快捷键Ctrl+x,选择"终端管理员"即可打开Windows下的命令行工具PowerShell

我们在命令行中输入ipconfig即可查询到本机的IP地址。(Windows下的查询命令需要与ubuntu下的ifconfig做区分)

复制代码
#查看网络接口状态(Windows)
ipconfig

拿到ip地址后,我们可以在两端分别ping一下,看是否能ping通

这样就说明我们网络连接没问题了,这也是我们所有ssh远程连接的基础。

三、 在配置SSH连接(通过SSH密钥对)

  1. 生成SSH密钥对

在 Windows PowerShell 中执行:

复制代码
ssh-keygen -t rsa -b 4096

按提示连续回车,默认将密钥对生成在 C:\Users\你的用户名\.ssh\id_rsaid_rsa.pub

我这里已经生成过SSH密钥了,所以会提示是否需要覆盖。

接下来是将生成的密钥通过ssh发送至远程服务器的 ~/.ssh/authorized_keys 文件下,我们在PowerShell中输入命令:

复制代码
# 读取本地公钥内容
$publicKey = Get-Content "$env:USERPROFILE\.ssh\id_rsa.pub"

# 使用 SSH 将公钥追加到远程服务器
ssh 用户名@ubuntu ip地址 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '$publicKey' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

第一次通过SSH发送会需要我们输入ubuntu的密码。(因为我们SSH密钥对还没配置好)

四、 配置VScode的SSH连接

打开Windows下的VScode,使用快捷键Ctrl+Shift+P打开上面的搜索框,输入SSH,选择

"Open SSH Configuration File"->第一个配置文件

可以参照我的配置文件,将对应项修改为自己的服务器配置即可。

复制代码
Host 10.55.131.104              # 定义一个名为"10.55.131.104"的主机别名(可自定义,建议用 IP 或域名)
  HostName 10.55.131.104        # 指定实际连接的远程服务器 IP 地址或域名
  User kevin                    # 连接时使用的用户名(远程服务器的登录账号)
  Port 22                       # 远程服务器 SSH 服务监听的端口(默认 22)
  IdentityFile ~/.ssh/id_rsa    # 指定用于身份验证的私钥文件路径(SSH 密钥认证)

点击刷新就会出现我们文件所配置的SSH服务了。

后续我们想要通过SSH远程连接ubuntu服务器可以直接点击箭头,就会自动连接上服务器,而不需要我们输入密码了!

相关推荐
时序数据说37 分钟前
如何选择时序数据库:关键因素与实用指南
大数据·数据库·物联网·时序数据库·iotdb
白毛大侠2 小时前
在 Ubuntu 24.04 中安装 Python 2.7、pip 及 mysqlclient==1.4.6 的完整指南
python·ubuntu·pip
Gene_20222 小时前
[TOOL] ubuntu 使用 ffmpeg 操作 gif、mp4
linux·ubuntu·ffmpeg
对你无可奈何4 小时前
ubuntu 22.04 anaconda comfyui的安装
python·ubuntu·aigc
Ronin3054 小时前
【Linux系统】进程状态 | 进程优先级
linux·运维·服务器·ubuntu
DogDaoDao6 小时前
Windows下VScode配置FFmpeg开发环境保姆级教程
windows·vscode·ffmpeg·音视频·gcc
TeleostNaCl7 小时前
一次因 luci 无法登录而通过 SSH 升级 OpenWrt 固件的经验总结
运维·网络·经验分享·ssh·智能路由器
aningxiaoxixi7 小时前
vscode 中的 mermaid
网络·ide·vscode
国科安芯8 小时前
车规级ASM1042芯片在汽车无线充电模块中的应用探索
人工智能·单片机·嵌入式硬件·物联网·安全·汽车