vs code连接远程服务器docker环境及配置免密登录

VS Code连接远程服务器上的Docker容器

先SSH连服务器,再Attach容器,最常用、最稳定,不需要本地装Docker**。

环境说明:远程Linux服务器上已经运行docker、容器已经启动;本地Windows/macOS。

方案1:Remote‑SSH + Dev Containers(⭐推荐)

本地VS Code安装插件

  • Remote‑SSH:连接远程Linux服务器
  • Dev Containers(旧名Remote‑Containers):接入docker容器

步骤

  1. VS Code左下角绿色><图标 → Connect to Host...,输入服务器ssh地址:user@服务器IP,完成ssh登录远程服务器,打开新远程窗口。

建议配置ssh密钥免密登录,避免反复输密码。

  1. 在已经SSH连上服务器的这个VS Code窗口:

    按 Ctrl+Shift+P(F1),输入:

    Dev Containers: Attach to Running Container...

  2. 下拉列表会列出服务器上所有正在运行的docker容器,选择你要进入的容器。

  3. VS Code会自动在容器内部安装vscode服务端,新开窗口,直接操作容器内部文件、终端、调试。

✅优点:本地不需要安装Docker ;GPU环境也可以正常使用;直接访问容器内部环境。

⚠️注意:代码文件要放在远程服务器磁盘,不能把本地电脑文件直接挂载进远程docker容器(docker不支持跨机器bind mount)。


免密登录

现状

服务器已有 ~/.ssh/authorized_keys,里面已经有其他人的 id_ed25519 公钥,不能删除原有内容,只追加你自己的公钥,一行一个密钥。

你的环境:Windows本地,远程Linux服务器,VSCode Remote‑SSH + Dev Containers

步骤1:本地Windows生成密钥对(PowerShell)

  1. 打开 PowerShell
powershell 复制代码
ssh-keygen -t ed25519

全部直接回车:

  • 回车(保存位置默认)
  • 回车(密钥密码:留空,不要输入任何字符,实现免密)
  • 回车(确认密码)

生成文件位置:

C:\Users\你的Windows用户名\.ssh\

  • id_ed25519 👉私钥(留在本机,绝不传到服务器)
  • id_ed25519.pub 👉公钥,需要复制到服务器
  1. 打印出你的公钥,完整复制全部输出(一整行,不要换行)
powershell 复制代码
cat ~/.ssh/id_ed25519.pub

复制全部,开头是 ssh-ed25519。

步骤2:SSH密码登录服务器(最后一次输密码)

PowerShell执行:

powershell 复制代码
ssh 服务器用户名@服务器IP

输入服务器密码,登录进入服务器。

步骤3:追加你的公钥到已存在的authorized_keys

  1. 编辑文件
bash 复制代码
nano ~/.ssh/authorized_keys
  • 使用键盘方向键,移动光标到文件最末尾,新建一行
  • 把刚才复制好的你的公钥粘贴到这新一行

✅原有其他人的密钥全部保留不动;每个人公钥占独立一行。

✅确保你的公钥是完整一整行,不要中间换行。

  1. 保存退出nano:

    Ctrl+O → 按回车确认保存 → Ctrl+X退出编辑器。

  2. 设置权限(必须执行,就算文件本来就存在)

bash 复制代码
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
  1. 退出服务器
bash 复制代码
exit

步骤4:PowerShell测试免密登录(关键校验)

回到Windows PowerShell:

powershell 复制代码
ssh 服务器用户名@服务器IP

✅直接登录、不需要输入密码 ,才算成功。

❌如果还要密码:不能往下走,回头检查粘贴是否多换行、权限命令是否执行。

步骤5:VS Code配置ssh config

  1. VSCode按 Ctrl+Shift+P
    输入:Remote‑SSH: Open SSH Configuration File,回车
    选择:C:\Users\你的Windows用户名\.ssh\config

粘贴下面模板,修改三处:

ssh-config 复制代码
Host my-server
  HostName 这里填你的服务器IP
  User 这里填服务器登录用户名
  IdentityFile C:\Users\你的Windows用户名\.ssh\id_ed25519

IdentityFile 写私钥id_ed25519,不要写.pub公钥。保存文件。

步骤6:VSCode连接服务器,接入Docker容器

  1. VSCode点左下角绿色>< → Connect to Host...,选择 my‑server
    新开窗口,左下角显示 SSH: my‑server,代表连上远程服务器。

该窗口打开的文件都在服务器,不是本地电脑。

  1. 在这个SSH远程窗口,Ctrl+Shift+P
    执行:Dev Containers: Attach to Running Container...
  2. 在列表选中你要的docker容器。
  3. VSCode再次新开窗口,左下角 Dev Container: xxx,成功进入容器内部。

补充:如果attach看不到容器

在SSH服务器终端执行:

bash 复制代码
sudo usermod -aG docker $USER

断开ssh,重新连接服务器即可生效。

简单排错

  1. PowerShell能免密登录,但VSCode仍要密码:检查config中IdentityFile路径是否正确,用的是私钥不是公钥。
  2. 粘贴公钥后无法免密:打开authorized_keys确认你的密钥是单独完整一行,没有被换行拆分。
  3. 其他人不受影响:原有密钥保留
相关推荐
木子欢儿19 分钟前
国内 macOS/Linux 安装 rust
linux·运维·服务器·macos·rust
迪菲赫尔曼31 分钟前
【基础篇 26】第一次在服务器完成训练:准备数据、断线继续、检查成果与备份
运维·服务器·人工智能·机器学习·计算机视觉
进击的荆棘36 分钟前
Linux系统——线程同步与互斥
linux·运维·服务器·策略模式·同步·互斥·posix
.道阻且长.1 小时前
Linux基本开发工具:gdb和cgdb的使用
linux·运维·服务器·开发语言
叼烟扛炮1 小时前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之av_guess_format调用流程与实战(三十六)
linux·运维·服务器·ffmpeg·ffmpeg音视频进阶
进击的荆棘2 小时前
Linux系统——线程概念与控制之线程封装
linux·运维·服务器·线程
天诰14 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
陈希12315 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
女神下凡16 小时前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范