前言

由于项目的需求,学习了以下如何在Ubuntu的服务器上面装好Docker,并用SSH远程连接。下面是调用成功的调试顺序~

1.在服务器本地安装Openssh-Server

(1). 更新源列表

打开"终端窗口",输入"sudo apt-get update"–>回车–>“输入当前登录用户的管理员密码”–>回车,就可以了。
(2).安装openssh-server

在终端中输入: sudo apt-get install openssh-server

(3) 查看 查看ssh服务是否启动

打开"终端窗口",输入"sudo ps -e |grep ssh"–>回车–>有sshd,说明ssh服务已经启动,如果没有启动,输入"sudo service ssh start"–>回车–>ssh服务就会启动。这里注意,第一句代码之后,弹出有sshd 才算ssh服务开启,如果什么都没有,但ssh服务就没有开启。

SSH服务 另外的启动方式:sudo /etc/init.d/ssh start

(4)SSH配置服务相关

配置相关:
ssh-server配置文件位于/etc/ssh/sshd_config,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。

添加端口就是在#Port 22的下一行 加上Port 8080。 8080可以写成你想要的其他端口

把配置文件中的”PermitRootLogin without-password”加一个”#”号,把它注释掉,再增加一句”PermitRootLogin yes” (可能没有PermitRootLogin without-password这行命令,在其相似的句子后面,加上PermitRootLogin yes 即可。 这是ssh服务开启root用户ssh权限。

然后重启SSH服务:

sudo /etc/init.d/ssh stop
sudo /etc/init.d/ssh start

这里再记录一些SSH其他的常用命令:(Ubuntu18.04和20.04亲测好用)

#开启自启动SSH
sudo systemctl enable ssh

#关闭开启自启动SSH
sudo systemctl disable ssh

#单次开启ssh
sudo systemctl start ssh

#单次关闭ssh
sudo systemctl stop ssh

#查看ssh是否启动,看到Active:active(running)表示成功
sudo systemctl status ssh

此时,你就可以用ssh远程连接你的这台ubuntu服务器了。

2.在服务器本地安装Docker

安装docker的过程很简单,主要是下载docker end,
我主要参考的这个网站 Install Docker on ubuntu

https://docs.docker.com/engine/install/ubuntu/

只需要执行到:Upgrade Docker Engine就ok了,此时Docker就装好咯!

3.SSH远程连接Docker容器

1.自己尝试的部署SSH 成功方案

装好Docker 之后 你需要pull镜像,运行容器balabala等等。

这里分享一下,我经常用的run命令:

sudo docker run -itd --name="xxx" -p 8090:8090  ImageID(改为你的)  /bin/bash

sudo docker run -itd  -v 宿主机目录:容器目录(code:/code) -p 10789:22 --shm-size="1g"(多线程运行程序可选) --gpus all  --name="xxx" ImageID   /bin/bash

sudo docker run -itd  -v /home/b605/code:/code(宿主机根目录) -p 10789:22 --shm-size="1g" --gpus all  --name="cc" db15446df90b /bin/bash

sudo docker run -itd  -v /home/b605/code:/code -p 10789:22 --shm-size="1g" --gpus all  --name="torch1.9.1" --restart=always f5bc49447a8e /bin/bash

然后用sudo docker attach 或者是 sudo docker exec命令连接docker容器(这里就不多说命令了,菜鸟教程上有很多解释)

连接上Docker容器之后,你可以通过passwd来修改当前容器的连接密码(也就是说,你在远程ssh连接需要输入的密码,用户名一般是root)

OK,到这里,你依然不能SSH远程连接Docker容器,还差最后一步:在Docker 容器内部装好Openssh-Server并开启就好了。

按照第一步重新安装好SSH服务,安装过程中可能不需要加sudo了。

需要多说的一句话是,容器内可能什么都没有安装,要编辑ssh的信息,你可能需要现在容器内安装vim编辑器,,apt-get install vim,另外,在最后配置SSH的时候,容器内的SSH服务,必须要添上这三种:

vim /etc/ssh/sshd_config
	去掉 Port 22 前面的井号
	去掉 ListenAddress 0.0.0.0 前面的井号
	去掉 ListenAddress :: 前面的井号
	去掉 PermitRootLogin yes 前面的井号
	将 UsePAM yes 修改为 UsePAM no
1.    你docker映射的端口号:比如Port 8090
2.    PermitRootLogin yes
3.    RSAAuthentication yes (2和3放在一起就好了 3或者不放)
4. passwd #终端内passwd 设置下ssh连接的密码 用户名一般都是root

最后重启以下容器内的ssh服务,就可以实现远程访问啦!

另外,想要docker自启动之后,容器内的ssh服务也自动开启,可以将ssh开启的服务命令写入.bashrc 文件中省事, 也就是service ssh start 写入到.bashrc 文件中.

2. Docker书上提供的方案

(1) 首先安装openssh-server

apt-get install openssh-server

(2)安好之后,如果需要正常启动SSH服务,则目录 /var/run/sshd 必须存在。下面手动创建他,并启动ssh服务。

mkdir -p /var/run/sshd
/usr/sbin/sshd -D &
# 返回[1] 3254

此时,查看容器的22端口(SSH服务默认监听的端口),可见此端口已经处于监听状态:

netstat -tunlp #查看命令
#若没有安装netstat,安装一下即可
apt-get install net-tools

加监听端口,可以参考第一个SSH配置中的内容(Port xxx)

修改SSH服务的安全登陆配置,取消pam登陆限制:

sed -ri 's/session required  pam_loginuid.so/#session required   pam_loginuid.so/g' /etc/pam.d/sshd

在root用户目录下创建.ssh目录,并复制需要登陆的公钥信息(一般为本地主机用户目录下的.ssh/id_rsa.pub文件,可由ssh-keygen -t rsa命令生成)到authorized_keys文件中:

mkdir root/.ssh
vim /root/.ssh/authorized_keys

创建自动启动SSH服务的可执行文件run.sh,并添加可执行权限:

vi /run.sh
chmod +x run.sh

run.sh脚本内容:

#!/bin/bash
/usr/sbin/sshd -D

最后,退出容器:exit

保存镜像:
将退出的容器用docker commit 命令保存为一个新的sshd:ubuntu的镜像。

docker commit fc1 sshd:ubuntu

这样就保存啦!

下次就可以使用这个镜像跑别的容器啦!

docker run -p 10022:22 -itd --name='xxx' sshd:ubuntu /run.sh

启动成功!

在宿主主机或者其他主机上,可以通过SSH访问10022端口来登陆容器!

3 从SSH中进入Conda环境

有时候服务器端的开发环境配置好了,但SSH远程连接的时候没有办法进入Conda环境,显示“conda:未找到命令 ”。
只需要在SSH终端中输入:

echo 'export PATH="/opt/conda/bin:$PATH"'>>~/.bashrc#注意需要是自己的conda的地址
source ~/.bashrc
//设置CUDA的路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.1/lib64
export PATH=$PATH:/usr/local/cuda-11.1/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.1

就可以啦!

Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐