1
+ from hashlib import md5
1
2
import json
2
3
import os
3
4
import subprocess
@@ -91,8 +92,11 @@ def run_sync_thread(parsed_containers, ecs_manifest):
91
92
if len (container .volumes ) > 0 :
92
93
observer = Observer ()
93
94
container_name = container .name
94
- port = parsed_containers [container_name ].get ("netcat_port" , None )
95
95
for volume in container .volumes :
96
+ md5_volume = md5 (volume .encode ("utf-8" )).hexdigest ()
97
+ port = parsed_containers [container_name ].get (
98
+ f"netcat_port_{ md5_volume } " , None
99
+ )
96
100
_from , _ = volume .split (":" )
97
101
event_handler = SynchronizeEventHandler (volume , port )
98
102
event_handlers .append (event_handler )
@@ -172,8 +176,11 @@ def run_nc_command(
172
176
for container in containers :
173
177
if len (container .volumes ) > 0 :
174
178
for volume in container .volumes :
179
+ md5_volume = md5 (volume .encode ("utf-8" )).hexdigest ()
175
180
random_port = generate_random_port ()
176
- parsed_containers [container_name ]["netcat_port" ] = random_port
181
+ parsed_containers [container_name ][
182
+ f"netcat_port_{ md5_volume } "
183
+ ] = random_port
177
184
port_forward (
178
185
parsed_containers ,
179
186
container_name ,
@@ -184,15 +191,28 @@ def run_nc_command(
184
191
)
185
192
client = boto3 .client ("ssm" )
186
193
target = parsed_containers .get (container_name )["ssm_target" ]
187
- command_server = [
188
- f"bash -c 'while true; do nc -v -l { random_port } >"
189
- f" /tmp/{ random_port } .tar.gz.tmp; cp /tmp/{ random_port } .tar.gz.tmp"
190
- f" /tmp/{ random_port } .copy.tar.gz; fc=$(cat"
191
- f" /tmp/{ random_port } .copy.tar.gz | tar -ztf - | head -c1); if ["
192
- f" $fc = . ]; then cat /tmp/{ random_port } .copy.tar.gz | tar -xzf -;"
193
- f" else cat /tmp/{ random_port } .copy.tar.gz | tar -xzf - -C /; fi;"
194
- " done'"
195
- ]
194
+ command_server = [f"""
195
+ bash -c '
196
+ set -x
197
+ set -u
198
+ while true
199
+ do
200
+ RANDOM_PORT={ random_port }
201
+ RANDOM_NUMBER=$RANDOM
202
+ nc -v -l ${{RANDOM_PORT}} > /tmp/${{RANDOM_PORT}}.${{RANDOM_NUMBER}}.tar.gz.tmp
203
+ cp /tmp/${{RANDOM_PORT}}.${{RANDOM_NUMBER}}.tar.gz.tmp /tmp/${{RANDOM_PORT}}.${{RANDOM_NUMBER}}.copy.tar.gz
204
+ rm /tmp/${{RANDOM_PORT}}.${{RANDOM_NUMBER}}.tar.gz.tmp
205
+ fc=$(cat /tmp/${{RANDOM_PORT}}.${{RANDOM_NUMBER}}.copy.tar.gz | tar -ztf - | head -c1)
206
+ if [ $fc = . ]
207
+ then
208
+ cat /tmp/${{RANDOM_PORT}}.${{RANDOM_NUMBER}}.copy.tar.gz | tar -xzf -
209
+ else
210
+ # cat /tmp/${{RANDOM_PORT}}.${{RANDOM_NUMBER}}.copy.tar.gz | tar -xzf - -C /
211
+ tar -xzf /tmp/${{RANDOM_PORT}}.${{RANDOM_NUMBER}}.copy.tar.gz -C /
212
+ fi
213
+ rm /tmp/${{RANDOM_PORT}}.${{RANDOM_NUMBER}}.copy.tar.gz
214
+ done'
215
+ """ ] # noqa
196
216
parameters_nc_server = {"command" : command_server }
197
217
ssm_nc_server = client .start_session (
198
218
Target = target ,
0 commit comments