-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest.sh
68 lines (55 loc) · 2.4 KB
/
test.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/bin/bash
SSH_SERVER_IMAGE=${SSH_SERVER_IMAGE:="davidlor/ssh-port-forward-server:latest"}
SSH_CLIENT_IMAGE=${SSH_CLIENT_IMAGE:="davidlor/ssh-port-forward-client:latest"}
SSH_KEYS_LOCATION="/tmp/ssh-port-forward-test-keys" # Path MUST NOT EXIST (will be removed); without ending /
NETWORK_A="ssh-portforwarding-network-a"
NETWORK_B="ssh-portforwarding-network-b"
NETWORK_TRUNK="ssh-portforwarding-network-trunk"
CONTAINER_SSH_SERVER="ssh-portforwarding-A-server"
CONTAINER_SSH_CLIENT="ssh-portforwarding-B-client"
CONTAINER_UPSTREAM_SERVER="ssh-portforwarding-A-nginx"
set -x
# Create public & private keys
mkdir ${SSH_KEYS_LOCATION} || { echo "SSH Keys location path must not exist!"; exit 1; }
ssh-keygen -f "$SSH_KEYS_LOCATION/sshkey" -q -N ""
# Create networks
docker network create ${NETWORK_A}
docker network create ${NETWORK_B}
docker network create ${NETWORK_TRUNK}
# Create SSH Server container
docker run -d --name=${CONTAINER_SSH_SERVER} \
--network=${NETWORK_TRUNK} \
-v "$SSH_KEYS_LOCATION/sshkey.pub:/ssh_pubkey:ro" \
${SSH_SERVER_IMAGE}
docker network connect ${NETWORK_A} ${CONTAINER_SSH_SERVER}
# Create Nginx Server container (Upstream server, the server that we will try to connect to through forwarded port)
docker run -d --name=${CONTAINER_UPSTREAM_SERVER} \
--network=${NETWORK_A} \
nginxdemos/hello
# Create SSH Client container
docker run -d --name=${CONTAINER_SSH_CLIENT} \
--network=${NETWORK_TRUNK} \
-e MAPPINGS="80:$CONTAINER_UPSTREAM_SERVER:80" \
-e "SSH_HOST=$CONTAINER_SSH_SERVER" \
-e "SSH_PORT=2222" \
-e "SSH_USER=ssh" \
-v "$SSH_KEYS_LOCATION/sshkey:/ssh_key:ro" \
${SSH_CLIENT_IMAGE}
docker network connect ${NETWORK_B} ${CONTAINER_SSH_CLIENT}
# Run HTTP Client container
docker run --rm --network=${NETWORK_B} curlimages/curl \
curl "http://$CONTAINER_SSH_CLIENT:80"
# If everything worked, you should be able to see some HTML
test_status=$?
# Press enter to continue if HTTP Client container failed execution (for manually reviewing containers before teardown)
if [ $test_status -ne 0 ]
then
echo "Press Enter to continue with teardown"
read -r
fi
# Teardown all
docker stop ${CONTAINER_UPSTREAM_SERVER} ${CONTAINER_SSH_CLIENT} ${CONTAINER_SSH_SERVER}
docker rm ${CONTAINER_UPSTREAM_SERVER} ${CONTAINER_SSH_CLIENT} ${CONTAINER_SSH_SERVER}
docker network rm ${NETWORK_A} ${NETWORK_B} ${NETWORK_TRUNK}
rm -rf ${SSH_KEYS_LOCATION}
exit $test_status