Openssh远程连接Docker

本文目录

  • 秘钥登录
    • 1. Dockerfile
    • 2. ssh连接容器
  • 密码登录
    • 1. 安装openssh
    • 2. 设定密码
    • 3. 设置密码登录

使用openssh我们可以将Docker启动的容器当做一个小型的服务器来使用,这样我们登陆容器的时候就可以用ssh [email protected]来登陆使用了

注意:使用openssh登录docker有两种方法,一种是秘钥登录,另一种是密码登录,不论是秘钥登录还是密码登录都需要安装openssh。这里对于秘钥登录我们给出dockerfile,对于密码登录我们手动安装,当然也可以根据需求是选择创建镜像时安装还是建好docker后在安装

秘钥登录

1. Dockerfile

首先免密登陆容器需要秘钥,这里我们将本机的ssh文件夹放在与Dockerfile相同的文件夹下

ssh文件夹一般在/home/root/.ssh

然后编写我们的Dockerfile,这里我们基于nvidia/cuda镜像来创建一个简单的镜像(邮箱和用户名改为自己的即可)下面的dockerfile意思是说将本地的ssh文件夹传到容器中,然后安装openssh-server,随后修改密钥登陆,禁止密码登录

FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04

LABEL maintainer xxx"[email protected]"

RUN apt-get update

# openssh server
COPY .ssh/ /root/.ssh/
RUN apt-get install -y openssh-server && \
    cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys && \
    chmod 600 /root/.ssh/authorized_keys /root/.ssh/id_rsa.pub /root/.ssh/id_rsa && \
    sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config && \
    sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config && \
    sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin prohibit-password/g' /etc/ssh/sshd_config

然后我们如果这样进入容器,远程连接时会出现如下错误,解决这个问题只需要在容器中运行service ssh restart即可。

ssh: connect to host 192.168.9.148 port 2134: Connection refused

但是这样每次关闭容器后需要再次运行上述代码,很麻烦,因此我们写入一个脚本来每次登陆容器时自动运行上述命令,在Dockerfile中加入以下代码即可

# auto start openssh
RUN touch /root/startup_run.sh && \
    echo '#!/bin/bash' | tee -a /root/startup_run.sh  && \
    echo '\nLOGTIME=$(date "+%Y-%m-%d %H:%M:%S")' | tee -a /root/startup_run.sh  && \
    echo 'echo "[$LOGTIME] startup run..." >>/root/startup_run.log' | tee -a /root/startup_run.sh  && \
    echo 'service ssh start >>/root/startup_run.log' | tee -a /root/startup_run.sh  && \
    chmod +x /root/startup_run.sh
RUN echo '\n# startup run' | tee -a /root/.bashrc  && \
    echo 'if [ -f /root/startup_run.sh ]; then' | tee -a /root/.bashrc  && \
    echo '      /root/startup_run.sh' | tee -a /root/.bashrc  && \
    echo 'fi' | tee -a /root/.bashrc
RUN /bin/bash -c "source ~/.bashrc"

2. ssh连接容器

首先根据Dockerfile创建一个镜像

docker build -t <image:tag> .

根据我们的镜像创建一个容器

docker run -it -p 3712:22 image:tag /bin/bash

此时容器已经打开了,然后我们在另一个终端或者在vscode中通过ssh远程连接即可

ssh root@ip -p 3712

密码登录

1. 安装openssh

这里我们创建一个普通容器不包含Openssh,并使用如下命令进入容器

docker run -it xx/xx:xx /bin/bash

此时容器内未安装openssh,因此我们首先要安装openssh

apt-get update
apt-get install -y openssh-server
apt-get install -y vim

2. 设定密码

稍后我们要进行密码登录,所以这里设置一下密码

root@ee767b7c05d6:/workspace# passwd
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

3. 设置密码登录

默认的,openssh不允许密码登录,这里我们设置一下

vim /etc/ssh/sshd_config

将其中的PasswordAuthentication后面改为yes

然后重启openssh

service ssh restart

就可以按照秘钥登录所述ssh登录docker了,注意如果不修改PasswordAuthentication的话登录后输入密码会被docker拒绝登录Permission denied, please try again.

你可能感兴趣的:(Linux,pytorch,深度学习,机器学习)