Browse Source

Docker Fix and Code Clean Up

pull/122/head
Koushik M L N 6 years ago
parent
commit
2b6bc6a7cc
  1. 8
      Dockerfile
  2. 3
      Dockerfile-ssh
  3. 15
      docker-compose.yml
  4. 16
      wetty.mjs

8
Dockerfile

@ -3,13 +3,15 @@ WORKDIR /usr/src/app
RUN apk add --update build-base python
COPY . /usr/src/app
RUN yarn
FROM node:8-alpine
MAINTAINER butlerx@notthe.cloud
WORKDIR /app
RUN adduser -D -h /home/term -s /bin/sh term && \
( echo "term:term" | chpasswd ) && \
apk add openssh-client
apk add openssh-client && \
apk add sshpass
USER term
EXPOSE 3000
COPY --from=builder /usr/src/app /app
CMD node bin
RUN mkdir ~/.ssh
CMD ssh-keyscan -H wetty-ssh >> ~/.ssh/known_hosts && node bin

3
Dockerfile-ssh

@ -0,0 +1,3 @@
FROM sickp/alpine-sshd:latest
RUN adduser -D -h /home/term -s /bin/sh term && \
( echo "term:term" | chpasswd )

15
docker-compose.yml

@ -1,4 +1,4 @@
version: "3"
version: "3.5"
services:
wetty:
@ -11,5 +11,16 @@ services:
- "3000:3000"
environment:
PORT: 3000
SSHHOST: 'localhost'
SSHHOST: 'wetty-ssh'
SSHPORT: 22
wetty-ssh:
build:
context: .
dockerfile: Dockerfile-ssh
container_name: 'wetty-ssh'
networks:
default:
name: wetty

16
wetty.mjs

@ -40,17 +40,11 @@ function createServer(port, sslopts) {
function getCommand(socket, sshuser, sshpass, sshhost, sshport, sshauth, sshkey) {
const { request } = socket;
const match = request.headers.referer.match('.+/ssh/.+$');
console.log("Match ", match);
console.log("user ", sshuser);
const sshAddress = sshuser ? `${sshuser}@${sshhost}` : sshhost;
console.log("Address ", sshAddress);
const referer = url.parse(request.headers.referer, true);
sshpass = referer.query.sshpass ? referer.query.sshpass : sshpass;
console.log("PASS ", sshpass);
let sshPath = sshuser || match ? 'ssh' : path.join(__dirname, 'bin/ssh');
console.log("PATH ", sshPath);
const ssh = match ? `${match[0].split('/ssh/').pop().split('?')[0]}@${sshhost}` : sshAddress;
console.log("SSH ", ssh);
const sshRemoteOptsBase = [
sshPath,
ssh,
@ -62,11 +56,11 @@ function getCommand(socket, sshuser, sshpass, sshhost, sshport, sshauth, sshkey)
let sshRemoteOpts;
if (sshkey)
sshRemoteOpts = sshRemoteOptsBase.concat(['-i', sshkey])
sshRemoteOpts = sshRemoteOptsBase.concat(['-i', sshkey]);
else if (sshpass)
sshRemoteOpts = ['sshpass', '-p', sshpass].concat(sshRemoteOptsBase)
console.log(sshRemoteOpts);
sshRemoteOpts = ['sshpass', '-p', sshpass].concat(sshRemoteOptsBase);
else
sshRemoteOpts = sshRemoteOptsBase;
return [
process.getuid() === 0 && sshhost === 'localhost'
? ['login', '-h', socket.client.conn.remoteAddress.split(':')[3]]
@ -77,13 +71,11 @@ function getCommand(socket, sshuser, sshpass, sshhost, sshport, sshauth, sshkey)
}
export default function start(port, sshuser, sshpass, sshhost, sshport, sshauth, sshkey, sslopts) {
console.log("START", port, sshuser, sshpass, sshhost, sshport, sshauth, sshkey, sslopts);
const events = new EventEmitter();
const io = server(createServer(port, sslopts), { path: '/wetty/socket.io' });
io.on('connection', socket => {
console.log(`${new Date()} Connection accepted.`);
const [args, ssh] = getCommand(socket, sshuser, sshpass, sshhost, sshport, sshauth, sshkey);
console.log("PIKA PIKA", args, ssh);
const term = spawn('/usr/bin/env', args, {
name: 'xterm-256color',
cols: 80,

Loading…
Cancel
Save