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).”
2. 查看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_rsa
和 id_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服务器可以直接点击箭头,就会自动连接上服务器,而不需要我们输入密码了!