在Alpine容器中安装配置ssh服务端
Alpine是一个极其轻量级的Linux,通常用作制作Docker镜像,今天就来分享一下如何在Alpine容器中安装配置ssh并远程连接。
XML/HTML代码
- #创建macvlan网络(支持Ipv6)
- docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 --ipv6 --subnet=2408:8220:723:45a1::/64 --gateway=2408:8220:723:45a1::1 -o parent=eth0 macnet
- #使用宿主机的网络映射端口
- docker run -d --name alpine --hostname alpine -p 1122:22 -it --privileged=true --restart=always alpine
- #使用macvlan网络给容器独立IP,无需映射端口
- docker run -d --name alpine --hostname alpine --net=macnet --ip 192.168.0.211 -it --privileged=true --restart=always alpine
安装ssh服务端
创建容器后,就可以通过命令进行安装配置了,记得先把容器的22端口映射出来(macvlan无需映射)!
首先是修改镜像源为国内镜像源(清华大学镜像站),不然下载安装很慢,进入容器后执行:
XML/HTML代码
- docker exec -it alpine /bin/sh
- sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
XML/HTML代码
- https://mirrors.ustc.edu.cn/alpine/latest-stable/main
- https://mirrors.ustc.edu.cn/alpine/latest-stable/community
XML/HTML代码
- apk add --no-cache openssh-server
安装完成后,进入/etc/ssh目录生成密钥:
XML/HTML代码
- cd /etc/ssh
- ssh-keygen -A
到此,就安装完成了!
配置root用户可以远程连接
XML/HTML代码
- sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
通过下列命令启动:
XML/HTML代码
- /usr/sbin/sshd
需要注意的是,由于容器中使用open-rc服务管理器有很多限制,因此这里是使用的手动启动的方式,这意味着每次重启容器sshd不会启动,因此进入容器需要手动执行上述命令启动服务。
如果是要自己制作镜像并集成ssh,那么可以将上述启动命令写在Dockerfile中的CMD字段作为容器启动命令。
XML/HTML代码
- CMD ["/usr/sbin/sshd", "-D"]
配置文件
修改完成配置文件后,通过下列命令重启sshd即可:
XML/HTML代码
- kill -9 $(pidof sshd)
- /usr/sbin/sshd
编写Dockerfile
在任意目录创建并编辑Dockerfile文件,写入如下内容
XML/HTML代码
- FROM alpine:latest
- #替换中科大源并更新源、安装openssh等基础软件并修改配置文件和生成key并且同步时间
- RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
- && apk update \
- && apk add --no-cache openssh tzdata bash\
- && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
- && sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config \
- && ssh-keygen -t dsa -P "" -f /etc/ssh/ssh_host_dsa_key \
- && ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key \
- && ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key \
- && ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key \
- && echo "root:123456" | chpasswd \
- && rm -rf /var/lib/apt/lists/* \
- && rm /var/cache/apk/*
- #开放22端口
- EXPOSE 22
- #执行ssh启动命令
- CMD ["/usr/sbin/sshd", "-D"]
XML/HTML代码
- docker build -t alpine:sshd .
XML/HTML代码
- # Install
- RUN apk update \
- && apk add --no-cache --upgrade openssh-server \
- # Utils
- && apk add --no-cache --upgrade mc htop iotop ncdu tar zip nano vim bash sudo sed \
- # Net utils
- && apk add --no-cache --upgrade iputils paris-traceroute perl-net-telnet bind-tools iperf nmap \
- #Cleaning
- && rm -rf /var/lib/{apt,dpkg,cache,log}/ \
- && rm -rf /var/lib/apt/lists/*.lz4 \
- && rm -rf /var/log/* \
- && rm -rf /tmp/* \
- && rm -rf /var/tmp/* \
- && rm -rf /usr/share/doc/ \
- && rm -rf /usr/share/man/ \
- && rm -rf /var/cache/apk/* \
- && rm -rf $HOME/.cache \
XML/HTML代码
- # 选择一个已有的os镜像作为基础
- from Centos:centos6
- # 镜像的作者
- maintainer fanbin kong "kongxx@hotmail.com"
- # 安装openssh-server和sudo软件包,并且将sshd的usepam参数设置成no
- run yum install -y openssh-server sudo
- run sed -i 's/usepam yes/usepam no/g' /etc/ssh/sshd_config
- # 添加测试用户admin,密码admin,并且将此用户添加到sudoers里
- run useradd admin
- run echo "admin:admin" | chpasswd
- run echo "admin all=(all) all" >> /etc/sudoers
- # 下面这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录
- run ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
- run ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
- # 启动sshd服务并且暴露22端口
- run mkdir /var/run/sshd
- expose 22
- cmd ["/usr/sbin/sshd", "-d"]
最后可以用macvlan直接创建一个Alpine,然后远程ssh登录,默认root密码123456,看看是不是成功
XML/HTML代码
- #macvlan独立IP使用默认22端口
- docker run -d --name alpine --hostname alpine --net=macnet --ip 192.168.0.211 -i -t --privileged=true --restart=always alpine:sshd
- #使用宿主机IP映射22端口
- docker run -d --name alpine --hostname alpine -p 2222:22 -i -t --privileged=true --restart=always alpine:sshd
XML/HTML代码
- #macvlan独立IP使用默认22端口
- docker run -d --name alpine --hostname alpine --net=macnet --ip 192.168.0.211 -i -t --privileged=true --restart=always bimg/alpine-ssh
- #使用宿主机IP映射22端口
- docker run -d --name alpine --hostname alpine -p 2222:22 -i -t --privileged=true --restart=always bimg/alpine-ssh
Dockerhub:https://hub.docker.com/r/bimg/alpine-ssh
debian-ssh镜像:tlze/debian-sshd:latest