深度学习炼丹师必备技能—-在实验室服务器的docker容器中开启ssh服务


很多新手小白在做深度学习实验时,可能需要用Pycharm远程登录服务器中的docker容器,但是呢在配置时总是遇到各种各样的麻烦。我也曾被困扰过,但经过一段时间的摸索,总算弄清楚了配置的方法。

本文会详细介绍如何在docker容器内开启ssh服务,以便之后可以用Pycharm远程登录服务器中的docker容器,从而进行实验代码的调试或debug。

Step1

利用docker镜像(如centos),创建一个docker容器。这里要指定端口映射,必须要映射到容器内的22端口,否则无法用ssh登录容器。

docker run -it -p 3361:22 -p 3362:8888 centos /bin/bash

注意:这里的3361和3362端口你服务器需要开放,不然后面也会无法登录。我用的是阿里云服务器,是在防火墙中开放了这两个端口

Step2

安装 openssl, openssh-server 等工具

yum install -y openssl openssh-server

Step3

如果要正常启动ssh服务,/var/run/sshd 必须存在,手动创建并启动ssh服务:

mkdir -p /var/run/sshd
/usr/sbin/sshd -D & 

此时可能会出现如下报错:


解决方法:在docker容器内的命令行依次输入如下代码

ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''  
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''

再次执行

/usr/sbin/sshd -D &


成功开启ssh服务

查看sshd是否监听22端口

yum install -y net-tools
netstat -apn | grep ssh

Step4

修改ssh配置文件

在docker容器内的命令行输入:vim /etc/ssh/sshd_config

设置ssh的端口:Port 22


附:如果你希望用3030端口登录docker的ssh,那么需要把Port改成3030

将 PermitRootLogin 的 no 改为 yes,即允许root用户登录

Step5

重启ssh服务

/usr/sbin/sshd -D &

用上面方法重启,可能还是无法用root登录

如果不行,可以换下面命令进行ssh重启

/etc/init.d/ssh restart

查看sshd是否监听22端口

Step6

给docker容器添加密码

我们必须要给docker容器设置密码,后面才能以ssh的方式登录容器

在容器内使用 passwd 命令创建密码,若没有这个命令,则用 yum install passwd 进行安装

实战演练

利用ssh直接登录docker容器

ssh root@10.11.6.14 -p 3361

这里的root指的是docker容器的root用户,不是服务器的用户名,密码是你上面设的docker容器的密码

Pycharm远程连接docker容器

常见问题:Connection refused

出现Connection refused大概率是因为你的docker容器被stop了,那ssh服务自然没有开启,那就不能登录

解决方法:docker start 容器,然后用 /etc/init.d/ssh restart 开启ssh服务

开启成功的话会显示下面内容

Restarting OpenBSD Secure Shell server sshd [OK]

2021/07/28 星期三 最新示例:使用我的镜像创建docker容器

镜像名:shwei/pytorch:1.0

我的这个shwei/pytorch:1.0镜像(14.5GB)包含了所有基础的配置,如vimrc,tmux, zshrc, aliases等

(1)运行下面命令创建容器:

docker run –gpus all -it -h tesla551 -p 3030-3050:3030-3050 –privileged=true -v /newhome/xxx/docker-data:/root/container-data –name=xxx shwei/pytorch:1.0 /bin/bash

(2)在docker容器内的命令行输入:vim /etc/ssh/sshd_config,设置ssh的端口:Port 3030

(3)启动ssh服务 (alias ressh):/etc/init.d/ssh restart

这时就可以用 ip:3030 端口登录docker容器


Author: SHWEI
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source SHWEI !
评论
 Previous
手把手教你用Pytorch代码实现Transformer模型 手把手教你用Pytorch代码实现Transformer模型
写在前面 论文题目:Attention Is All You Need论文链接:https://arxiv.org/pdf/1706.03762.pdf 本文的代码主要参考wmathor的博客,并且针对其代码中的一些错误进行了纠正,同时我
2021-01-03
Next 
深入理解BatchNorm的原理、代码实现以及BN在CNN中的应用 深入理解BatchNorm的原理、代码实现以及BN在CNN中的应用
深入理解BatchNorm的原理、代码实现以及BN在CNN中的应用 BatchNorm是算法岗面试中几乎必考题,本文将带你理解BatchNorm的原理和代码实现,以及详细介绍BatchNorm在CNN中的应用。 一、BatchNorm论文
2020-11-18
  TOC