diff --git a/docker-compose.yml b/docker-compose.yml index 3a3be60..c317f96 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,6 +19,9 @@ services: dockerfile: ./quests/Dockerfile extra_hosts: - 'host.docker.internal:host-gateway' + volumes: + - ./config/ssh_key.pub:/ssh_key.pub:ro + - ./quests/entrypoint.sh:/entrypoint.sh:ro networks: internal: diff --git a/quests/Dockerfile b/quests/Dockerfile index c3def99..180d800 100644 --- a/quests/Dockerfile +++ b/quests/Dockerfile @@ -21,19 +21,9 @@ RUN yarn install --modules-folder /usr/src/node_modules ENV NODE_PATH=/usr/src/node_modules COPY ./packages/container /usr/local/lib/container COPY ./quests/.includes/zshrc /etc/zsh/zshrc - -ENV USERNAME=commander - -RUN adduser --disabled-password --gecos '' --shell /bin/zsh ${USERNAME} -COPY ./quests/sshd_config /etc/ssh/sshd_config -COPY ./config/ssh_key.pub /home/${USERNAME}/.ssh/authorized_keys -RUN chmod 600 /home/${USERNAME}/.ssh/authorized_keys \ - && chmod 700 /home/${USERNAME}/.ssh \ - && chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.ssh RUN rm -f /etc/motd /etc/issue /etc/issue.net /etc/update-motd.d/* - -RUN service ssh start +COPY ./quests/sshd_config /etc/ssh/sshd_config EXPOSE 22 -CMD [ "/usr/sbin/sshd", "-D" ] +ENTRYPOINT ["/bin/sh", "/entrypoint.sh"] diff --git a/quests/entrypoint.sh b/quests/entrypoint.sh new file mode 100644 index 0000000..a997b3f --- /dev/null +++ b/quests/entrypoint.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +USERNAME=commander + +if ! id -u ${USERNAME} >/dev/null 2>&1; then + adduser --disabled-password --gecos '' --shell /bin/zsh ${USERNAME} && \ + mkdir -p /home/${USERNAME}/.ssh && \ + cp /ssh_key.pub /home/${USERNAME}/.ssh/authorized_keys && \ + chmod 600 /home/${USERNAME}/.ssh/authorized_keys && \ + chmod 700 /home/${USERNAME}/.ssh && \ + chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.ssh +fi + +mkdir /run/sshd +echo "Starting SSH server" +/usr/sbin/sshd -D -e diff --git a/server/src/containers/docker.ts b/server/src/containers/docker.ts index 09476ce..3b76583 100644 --- a/server/src/containers/docker.ts +++ b/server/src/containers/docker.ts @@ -29,7 +29,10 @@ export function createContainer( name: string, imageId: string ): Promise { - let binds: string[] = [] + let binds: string[] = [ + `${config.projectRoot}/config/ssh_key.pub:/ssh_key.pub:ro`, + `${config.projectRoot}/quests/entrypoint.sh:/entrypoint.sh:ro`, + ] if (!config.isProduction && config.docker.mountQuest && imageId !== 'base') { logger.info('Mounting quest folder', imageId) binds = [ @@ -53,7 +56,7 @@ export async function getAndStartContainer( await container.start() } await new Promise((resolve) => { - setTimeout(resolve, 1000) + setTimeout(resolve, 2000) }) return container }