前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows 远程登录 Linux 服务器 docker 容器

Windows 远程登录 Linux 服务器 docker 容器

作者头像
为为为什么
发布2022-08-05 11:04:14
13.8K0
发布2022-08-05 11:04:14
举报
文章被收录于专栏:又见苍岚

ssh是较可靠,专为远程登录会话和其他网络服务提供安全性的协议,广泛用于远程登录的场景,也是远程调试代码的神兵利器。在开发中经常会在服务器启动自己的 docker 容器进行开发,又需要调试代码,vim的调试环境配置起来门槛又太高。于是就有了使用Windows直接ssh打通docker进行调试的需求。本文记录Windows远程登录Linux服务器docker容器的方法。

环境说明

  • 登录主机操作系统 Win 10
  • 被登录主机操作系统 docker container in Linux
  • 主机与被登录主机(此处指服务器,不是docker)网络联通,IP在同一网段
  • 服务器与docker的IP在同一网段

配置方法

建立docker与Linux服务器的端口映射

ssh协议链接时默认使用22端口,Windows与docker的端口往往不能直接进行映射(很可能不在一个网段),因此需要将docker的22端口映射到Linux服务器的某个端口,此时需要在建立docker容器时进行配置

代码语言:javascript
复制
$ docker run -it --name vvd -p 3721:22 -v /root/tmp:/root/tmp my_docker bash

  • 其中 -p 的部分表示将本机(服务器)的3721端口映射到容器的22端口。

容器内部安装ssh服务

需要在被登录的容器内部建立并启动ssh服务。

  • 首先需要安装:
代码语言:javascript
复制
apt-get update
apt-get install openssh-server
apt-get install openssh-client

  • 安装完成后需要容器每次启动时自动运行相关服务,可以在 ~/.bashrc中加入:
代码语言:javascript
复制
/etc/init.d/ssh start

这样就保证了docker容器自动启动该服务。

  • 查看ssh运行状态
代码语言:javascript
复制
/etc/init.d/ssh status

如果是 * sshd is running 说明ssh正常运行

修改容器内root用户登录设置

有的容器默认不支持root用户远程使用ssh协议进行密码登录的,此时需要更改设置。

  • 打开 /etc/ssh/sshd_config文件:
代码语言:javascript
复制
# PermitRootLogin prohibit-password # 默认打开 禁止root用户使用密码登陆,需要将其注释
RSAAuthentication yes #启用 RSA 认证
PubkeyAuthentication yes #启用公钥私钥配对认证方式
PermitRootLogin yes #允许root用户使用ssh登录

  • PermitRootLogin 设置为 yes

修改root密码

远程登录时需要使用系统的用户密码,我们就直接使用root用户登录好了,需要设置新建容器的密码:

代码语言:javascript
复制
passwd root

设置SSH

SSH连接服务器

需要用户名(被登录端用户)与被登录的主机ip和端口号 例如: 用户名- root ip:192.168.10.12 端口映射为 3721

  • linux
代码语言:javascript
复制
ssh root@192.168.10.12:3721

  • Windows
代码语言:javascript
复制
ssh -p 3721 root@192.168.10.12

  • 如果不清楚Linux系统端口映射配置情况:
代码语言:javascript
复制
iptables -t nat -L -n

X-shell配置

命令行ssh登录成功后就可以在X-shell中建立配置信息方便地连接了。

  • 新建会话,填写名称、IP、端口号(我们刚刚配置过的):
  • 用户身份认证,填入用户名密码(刚刚配置过的):
  • 随后就可以使用该会话直接登录docker容器了,为远程调试打下了坚实的基础:

填坑

  • ssh: Could not resolve hostname 192.168.10.12:3721: Name or service not known 这是在Windows中使用了Linux格式的SSH登录命令导致的解析错误 将命令语法更换为Windows的格式即可
  • root 用户无论如何密码不被接受 需要在被登录主机 /etc/ssh/sshd_config 中设置:
    • 重点:PermitRootLogin yes
  • Connection to 192.168.10.12 closed.
  • Connection closed by foreign host. 意思是 断开主机链接了,出现这种问题,跟你的IPTABLES,防火墙什么的都没关系。 造成这个原 因是因为原来连接到SSHD服务器进程的22端口,当你的客户端突然断开时,服务器端的TCP连接就处于一个半打开状态。当下一次同一客户机再次建立 TCP连接时,服务器检测到这个半打开的TCP连接,并向客户机回传一个置位RST的TCP报文,客户机就会显示connection closed by foreign host。 这是TCP协议本身的一个保护措施,并不是什么错误,你只要再重新连接服务器就能连上。 --------- http://www.pooy.net/connection-closed-foreign-host.html 总结一下解决方案: 关机重启

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年11月2日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境说明
  • 配置方法
    • 建立docker与Linux服务器的端口映射
      • 容器内部安装ssh服务
        • 修改容器内root用户登录设置
          • 修改root密码
            • 设置SSH
              • SSH连接服务器
                • X-shell配置
                  • 填坑
                    • 参考资料
                    相关产品与服务
                    容器镜像服务
                    容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档