Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 VSCODE 连接远程服务器上的容器

使用 VSCODE 连接远程服务器上的容器

作者头像
Alan Lee
发布于 2020-03-18 09:29:12
发布于 2020-03-18 09:29:12
9.9K01
代码可运行
举报
文章被收录于专栏:Small CodeSmall Code
运行总次数:1
代码可运行

自从 VSCODE 出现以来,我就立马从 pycharm 转入了。厌倦了 pycharm 的笨重,用了 vscode 之后只能说是真香,编辑器界的 flask。但是和 flask 一样,虽然轻便,但是自然基本上一切都需要你自己去配置,各种插件和扩展。有些功能 pycharm 可能自带,但是 VSCODE 就需要自己各种折腾,比如说本文的主题:本地连接远程服务器上的容器

先说需求:使用 VSCODE 在本地(如 Windows)连接远程服务器(如 Linux)上的容器,可以在编辑器内进行代码修改等操作。

pycharm 学习来的偏方

经过与同事交流,发现 pycharm 实现这个需求的方法无非就是把容器的 22 端口映射出来然后使用 ssh 登陆,相当于把容器也当成一个虚拟化的远程服务器。得益于 Remote - SSH,这在 VSCODE 中很好实现:

  1. 【远程服务器】启动容器,注意需要把容器的 22 端口映射出来,例如映射到 host 的 5222 端口:-p 5222:22
  2. 【远程服务器容器】设置 root 账户密码: passwd root 根据提示设置密码即可。如果你启动容器的时候使用 -u 参数指定了一个非 root 用户,那么相应的要设置该账户的密码。
  3. 【远程服务器容器】很多镜像都不会默认安装 ssh,所以需要在容器内安装 ssh 服务: apt update && apt install -y --no-install-recommends openssh-server
  4. 【远程服务器容器】一般进入容器时使用的都是 root 账号,但是 ssh 默认是禁止 root 账号使用密码远程登录的,所以需要修改 ssh 配置文件使其允许: sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config 但是如果你启动容器的时候使用 -u 参数指定了一个非 root 用户,那么这步可以跳过。
  5. 【远程服务器容器】启动 ssh 服务: service ssh start
  6. 【本地】使用 VSCODE 连接,添加新的 ssh host 的时候地址这么写: ssh root@your-server-ip -A -p 5222 这个 5222 就是第 1 步启动容器的时候设置的映射端口。之后输入密码即可,和正常的连接远程服务器一样。

完成!

另外,执行第 5 步之前,可以现在自己本地终端用 ssh 验证一下是否能连接上,如果出现如下的 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
39:e5:ef:60:f1:ae:08:b9:46:36:7c:7d:61:e8:c9:41.
Please contact your system administrator.
Add correct host key in /home/ataliba/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/ataliba/.ssh/known_hosts:17
RSA host key for host.host.com.br has changed and you have requested strict checking.
Host key verification failed.

则可以在本地执行以下命令重新生成 key 解决:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh-keygen -R [your-server-ip]:port

其中 port 为第 1 步中映射的端口。例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh-keygen -R [192.168.102.1]:5222

然后重新连接即可。

总体来说,在容器内执行的命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 设置密码
passwd root
# 替换国内源
sed -i s:/archive.ubuntu.com:/mirrors.aliyun.com:g /etc/apt/sources.list
sed -i s:/security.ubuntu.com:/mirrors.aliyun.com:g /etc/apt/sources.list
apt update && apt install -y --no-install-recommends openssh-server
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
service ssh start

至此本文正文就完成了。但是解决我这个需求其实应该还有另外一种官方办法:Remote - Containers,只是我折腾了半天实在是搞不通,感觉远没有刚这个方法简单快捷。

如果你还想看看我的吐槽,可以往下继续看,否则,可以关闭这个页面了。

END

Remote - Containers?

当然首先想到的是用微软官方出的插件:Remote - Containers,这个属于远程开发套件中的一个,主要用于连接容器。其他两个如下:

  • Remote - SSH:连接远程服务器,很好用,日常使用
  • Remote - WSL:连接 Windows 的 Linux 子系统,没怎么用过

虽然为远程开发套件(Remote Development)之一,但是真的能解决我的需求吗?这要看这个 Remote 怎么定义了。

默认情况下,这个 Remote 指的是本地的容器,没错,是本地的。这是经过我一番折腾后才意识到的。先看下官方文档是如何定义这个插件的:

The Visual Studio Code Remote - Containers extension lets you use a Docker container as a full-featured development environment. It allows you to open any folder inside (or mounted into) a container and take advantage of Visual Studio Code’s full feature set.

里面只字未提 Remote,而提到的时候,是在 Advanced Container Configuration 这一文档中的 Developing inside a container on a remote Docker host 部分。在这里的介绍中,我清楚地认识到 Remote - Containers 默认确实指的是连接本地容器(毕竟本地的容器相对于本地来说,也算是远程操作系统了):

Sometimes you may want to use the Remote - Containers extension to develop inside a container that sits on a remote server. Docker does not support mounting (binding) your local filesystem into a remote container, so VS Code’s default devcontainer.json behavior to use your local source code will not work. While this is the default behavior, in this section we will cover connecting to a remote host so that you can either attach to any running container, or use a local devcontainer.json file as a way to configure, create, and connect to a remote dev container.

看第一句话:Sometimes you may want to use the Remote - Containers extension to develop inside a container that sits on a remote server,Really?真的是 Sometimes 吗?如此经常的操作没想到被归为「非正常需求」。

然而经过安装 dockers for Windows,重启两次开启虚拟化,等等等等,半天的一顿折腾后,我放弃了。还要 ssh 免密登陆,还得本地安装 docker。这真的不如同事说的 pycharm 那样好用。

REAL END

Reference

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Security OAuth2.0实现
OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。
兜兜转转
2023/03/29
3.1K0
Spring Security OAuth2.0实现
Spring Boot Security 整合 OAuth2 设计安全API接口服务
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。本文重点讲解Spring Boot项目对OAuth2进行的实现,如果你对OAuth2不是很了解,你可以先理解 OAuth 2.0 - 阮一峰,这是一篇对于oauth2很好的科普文章。
程序员果果
2019/05/16
1.9K0
security和oauth2.0的整合
之前已经介绍过security的相关的介绍,现在所需要做的就是security和oauth2.0的整合,在原有的基础上我们加上一些相关的代码;代码实现如下:
Dream城堡
2018/09/10
1K0
Spring Security 在 Spring Boot 中使用 OAuth2【分布式】
  OAuth(开放授权,Open Authorization)是一个开放标准,为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 OAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 OAuth 是安全的。OAuth 2.0 是 OAuth 协议的延续版本,但不向后兼容 OAuth 1.0 即完全废止了 OAuth 1.0。很多大公司如 Google,Yahoo,Microsoft 等都提供了 OAuth 认证服务,这些都足以说明 OAuth 标准逐渐成为开放资源授权的标准。Oauth 协议目前发展到 2.0 版本,1.0 版本过于复杂,2.0 版本已得到广泛应用。Spring-Security-OAuth2 是对 OAuth2 的一种实现,并且跟 Spring Security 相辅相成,与 Spring Cloud 体系的集成也非常便利,最终使用它实现分布式认证授权解决方案。
Demo_Null
2020/10/30
7.3K0
Spring Security 在 Spring Boot 中使用 OAuth2【分布式】
使用 JWT、Redis、MySQL 存储 OAuth2.0 数据~
在《芋道 Spring Security OAuth2 入门》文章中,我们完成了 Spring Security OAuth 框架的学习。但是我们在文末中也提到,采用基于内存的 InMemoryTokenStore,实现访问令牌和刷新令牌的存储。它会存在两个明显的缺点:
芋道源码
2020/07/09
2.8K0
使用 JWT、Redis、MySQL 存储 OAuth2.0 数据~
Spring Security OAuth2 Demo
Spring Security OAuth2 Demo 项目使用的是MySql存储, 需要先创建以下表结构: CREATE SCHEMA IF NOT EXISTS `alan-oauth` DEFAULT CHARACTER SET utf8 ; USE `alan-oauth` ; -- ----------------------------------------------------- -- Table `alan-oauth`.`clientdetails` -- -------------
庞小明
2018/03/08
2.5K0
Spring Security OAuth2 Demo
Spring Cloud OAuth2 实现用户认证及单点登录
OAuth 2 有四种授权模式,分别是授权码模式(authorization code)、简化模式(implicit)、密码模式(resource owner password credentials)、客户端模式(client credentials),具体 OAuth2 是什么,可以参考这篇文章。(http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html)
古时的风筝
2019/10/24
2.1K0
Spring Cloud OAuth2 实现用户认证及单点登录
SpringCloud整合spring security+ oauth2+Redis实现认证授权
在微服务构建中,我们一般用一个父工程来通知管理依赖的各种版本号信息。父工程pom文件如下:
共饮一杯无
2022/11/28
1.1K0
SpringCloud整合spring security+ oauth2+Redis实现认证授权
使用OAuth2实现授权服务
OAuth 2发明之初是为了解决登录认证过程中的安全性问题,使用“委托”的形式使第三方应用获得数据权限及功能。OAuth 2.0协议中,使用访问令牌ACCESS_TOKEN代替传统的账号密码,提高了互联网环境下的安全性。
关忆北.
2022/09/28
1.6K0
使用OAuth2实现授权服务
Spring OAuth2 授权服务器配置详解
前两篇文章分别体验了Spring Authorization Server的使用和讲解了其各个过滤器的作用。今天来讲讲Spring Authorization Server授权服务器的配置。强烈建议自己手动搭建一次试试,纸上得来终觉浅,深知此事要躬行。提升你的代码量才是提高编程技能的不二法门,这也是本篇教程的意义所在。
码农小胖哥
2021/11/19
2.7K0
Spring Boot 与 Spring Security 的集成及 OAuth2 实现
Spring Security 是一个高度可定制的安全框架,它主要提供了身份认证和授权功能。通过 Spring Security,开发者可以定义哪些 URL 需要认证,哪些用户有权访问某些资源等。
2的n次方
2024/10/15
2.2K0
Spring Boot 与 Spring Security 的集成及 OAuth2 实现
SpringSecurity OAuth2 入门
OAuth(Open Authorization)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
用户8351972
2023/02/27
6650
SpringCloud+SpringBoot+OAuth2+Spring Security+Redis实现的微服务统一认证授权
因为目前做了一个基于 Spring Cloud 的微服务项目,所以了解到了 OAuth2,打算整合一下 OAuth2 来实现统一授权。关于 OAuth 是一个关于授权的开放网络标准,目前的版本是 2.0,这里我就不多做介绍了。
程序员小猿
2021/11/23
1.5K0
1 Springboot SpringCloud集成OAuth2入门详细教程
关于OAuth2的解释,有一篇比较出名的文章——理解OAuth 2.0 - 阮一峰的网络日志(http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html),可以了解一下OAuth2的基础知识。
天涯泪小武
2019/01/17
1.8K0
基于Spring Cloud Oauth2 JWT搭建微服务的安全认证中心
Oauth协议为用户资源的授权提供了一个安全的、开放而又建议的标准。oauth的授权不会是第三方初级到用户的账号信息(如用户名与密码),及第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此oauth是安全的。oauth是Open Authorization的简写
小东啊
2019/06/26
15.9K1
基于Spring Cloud Oauth2 JWT搭建微服务的安全认证中心
Spring Security---Oauth2详解
在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色:
大忽悠爱学习
2021/12/07
4.9K0
Spring Security---Oauth2详解
Spring Boot2.0 Oauth2 服务器和客户端配置及原理
有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片。
chinotan
2019/04/03
4.4K0
Spring Boot2.0 Oauth2 服务器和客户端配置及原理
写了一个 SSO 单点登录的代码示例给胖友!
在前面的文章中,我们学习了 Spring Security OAuth 的简单使用。
芋道源码
2020/07/02
1.8K1
SpringBoot入门建站全系列(三十五)整合Oauth2做单机版认证授权
OAuth 2.0 规范定义了一个授权(delegation)协议,对于使用Web的应用程序和API在网络上传递授权决策非常有用。OAuth被用在各钟各样的应用程序中,包括提供用户认证的机制。
品茗IT
2020/05/28
1.5K0
Spring整合Oauth2单机版认证授权详情
OAuth 2.0 规范定义了一个授权(delegation)协议,对于使用Web的应用程序和API在网络上传递授权决策非常有用。OAuth被用在各钟各样的应用程序中,包括提供用户认证的机制。
品茗IT
2019/09/12
1.8K0
推荐阅读
相关推荐
Spring Security OAuth2.0实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验