一、概述
有一台跳闆機,已經實作了免密登入後端伺服器。但是我寫了一個django項目,它是運作在容器中的,也需要免密登入後端伺服器。
雖然可以在容器中手動做一下免密登入,但是容器重新開機之後,之前做的設定都消失了。
是否可以在生成新的django鏡像時,也能免密登入後端伺服器呢?答案是可以的!
二、實作過程
環境說明
跳闆機
作業系統:centos 7.6
ip位址:192.168.28.229
後端主機
作業系統:centos 7.6
ip位址:192.168.28.218
制作docker鏡像
django_base目錄結構如下:
./
├── dockerfile
├── id_rsa
│ ├── id_rsa
│ └── id_rsa.pub
├── pip.conf
├── requirements.txt
├── run.sh
└── sources.list
複制
dockerfile
FROM ubuntu:16.04
# 修改更新源為阿裡雲
ADD sources.list /etc/apt/sources.list
ADD . /
# 時區為上海
ENV TZ Asia/Shanghai
# 設定時區,設定utf-8編碼,安裝django,添加任務計劃
RUN apt-get update && apt-get install -y tzdata locales python3-pip cron openssh-server && apt-get clean all && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
locale-gen en_US.UTF-8 && \
mkdir ~/.pip && cp /pip.conf ~/.pip && pip3 install --upgrade pip && \
pip3 install -r /requirements.txt && \
mkdir ~/.ssh && cp -r /id_rsa/* ~/.ssh
# 解決中文亂碼問題
#RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
# 添加啟動腳本
ADD run.sh .
RUN chmod 755 run.sh
ENTRYPOINT [ "/run.sh"]
複制
id_rsa檔案夾裡面的2個檔案,就是跳闆機的ssh秘鑰,copy進來即可。
pip.conf
[global]
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
複制
requirements.txt
Django==2.1.8
paramiko==2.7.1
複制
run.sh
#!/bin/bash
# 收集主機公鑰,寫入known_hosts,避免出現Are you sure you want to continue connecting (yes/no)?
ssh-keyscan -H -t ecdsa -p 22 192.168.28.218 >> ~/.ssh/known_hosts
複制
sources.list
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
複制
生成鏡像
cd django_base
docker build -t django_base:v1 .
複制
運作鏡像
docker run -it django_base:v1 /bin/bash
複制
測試ssh免密
ssh 192.168.28.218
複制
不需要輸入密碼,就表示成功了。