Closed chevyphillip closed 2 years ago
@chevonmdphillip can you run with —debug
and post the output?
Sure!
> axiom-exec id --debug
###########################################################################################################
# clean_up
#
clean_up() {
kill -0 $remotetailPID 2> /dev/null && kill -9 $remotetailPID &> /dev/null
kill -0 $tailPID 2> /dev/null && kill -9 $tailPID &> /dev/null
kill -0 $downloaderPID 2> /dev/null && kill -9 $downloaderPID &> /dev/null
echo -e "${Blue}Killing remote processes in a backgroud job${Color_Off}"
$interlace_cmd_nobar -c "$ssh_command _target_ 'tmux kill-session -t $uid'" >/dev/null 2>&1
$interlace_cmd_nobar -c "$ssh_exit_command _target_ " >/dev/null 2>&1
mv "$tmp" "$logs">/dev/null 2>&1
if [[ $keep_logs != true ]]; then
rm -r $logs >/dev/null 2>&1
fi
stty sane
tput init
exit
}
###########################################################################################################
# Display Help Menu
#
if [[ "$*" == "--help" ]] || [[ "$*" == "-h" ]] || [[ "$*" == "" ]]; then
usage
exit
fi
+ [[ id --debug == \-\-\h\e\l\p ]]
+ [[ id --debug == \-\h ]]
+ [[ id --debug == '' ]]
###########################################################################################################
# SSH Cache Flag
#
if [[ "$cache" == "false" ]]; then
generate_sshconfig
fi
+ [[ false == \f\a\l\s\e ]]
+ generate_sshconfig
ls -l "$AXIOM_PATH/accounts/" | grep "json" | grep -v 'total ' | awk '{ print $9 }' | sed 's/\.json//g'
++ ls -l /Users/chevy/.axiom/accounts/
++ grep json
++ grep -v 'total '
++ awk '{ print $9 }'
++ sed 's/\.json//g'
+ accounts='do.example
main-axiom
main'
ls -lh ~/.axiom/axiom.json | awk '{ print $11 }' | tr '/' '\n' | grep json | sed 's/\.json//g'
++ ls -lh /Users/chevy/.axiom/axiom.json
++ awk '{ print $11 }'
++ tr / '\n'
++ grep json
++ sed 's/\.json//g'
+ current=main-axiom
+ sshnew=/Users/chevy/.axiom/.sshconfig.new30109
instances
++ instances
++ doctl compute droplet list -o json
+ droplets='[
{
"id": 314838202,
"name": "stone16",
"memory": 1024,
"vcpus": 1,
"disk": 25,
"region": {
"slug": "tor1",
"name": "Toronto 1",
"sizes": [
"s-1vcpu-1gb",
"s-1vcpu-1gb-amd",
"s-1vcpu-1gb-intel",
"s-1vcpu-2gb",
"s-1vcpu-2gb-amd",
"s-1vcpu-2gb-intel",
"s-2vcpu-2gb",
"s-2vcpu-2gb-amd",
"s-2vcpu-2gb-intel",
"s-2vcpu-4gb",
"s-2vcpu-4gb-amd",
"s-2vcpu-4gb-intel",
"c-2",
"c2-2vcpu-4gb",
"s-4vcpu-8gb",
"s-4vcpu-8gb-amd",
"s-4vcpu-8gb-intel",
"g-2vcpu-8gb",
"gd-2vcpu-8gb",
"m-2vcpu-16gb",
"c-4",
"c2-4vcpu-8gb",
"s-8vcpu-16gb",
"m3-2vcpu-16gb",
"s-8vcpu-16gb-amd",
"s-8vcpu-16gb-intel",
"g-4vcpu-16gb",
"so-2vcpu-16gb",
"m6-2vcpu-16gb",
"gd-4vcpu-16gb",
"so1_5-2vcpu-16gb",
"m-4vcpu-32gb",
"c-8",
"c2-8vcpu-16gb",
"m3-4vcpu-32gb",
"g-8vcpu-32gb",
"so-4vcpu-32gb",
"m6-4vcpu-32gb",
"gd-8vcpu-32gb",
"so1_5-4vcpu-32gb",
"m-8vcpu-64gb",
"c-16",
"c2-16vcpu-32gb",
"m3-8vcpu-64gb",
"g-16vcpu-64gb",
"so-8vcpu-64gb",
"m6-8vcpu-64gb",
"gd-16vcpu-64gb",
"so1_5-8vcpu-64gb",
"m-16vcpu-128gb",
"c-32",
"c2-32vcpu-64gb",
"m3-16vcpu-128gb",
"c-48",
"m-24vcpu-192gb",
"g-32vcpu-128gb",
"so-16vcpu-128gb",
"m6-16vcpu-128gb",
"gd-32vcpu-128gb",
"c2-48vcpu-96gb",
"m3-24vcpu-192gb",
"g-40vcpu-160gb",
"so1_5-16vcpu-128gb",
"m-32vcpu-256gb",
"gd-40vcpu-160gb",
"so-24vcpu-192gb",
"m6-24vcpu-192gb",
"m3-32vcpu-256gb",
"so1_5-24vcpu-192gb",
"so-32vcpu-256gb",
"m6-32vcpu-256gb",
"so1_5-32vcpu-256gb"
],
"available": true,
"features": [
"backups",
"ipv6",
"metadata",
"install_agent",
"storage",
"image_transfer"
]
},
"image": {
"id": 115944010,
"name": "axiom-default-1661951687",
"type": "snapshot",
"distribution": "Ubuntu",
"regions": [
"tor1"
],
"min_disk_size": 25,
"size_gigabytes": 12.61,
"created_at": "2022-08-31T13:56:16Z",
"status": "available"
},
"size": {
"slug": "s-1vcpu-1gb",
"memory": 1024,
"vcpus": 1,
"disk": 25,
"price_monthly": 6,
"price_hourly": 0.00893,
"regions": [
"ams3",
"blr1",
"fra1",
"lon1",
"nyc1",
"nyc3",
"sfo3",
"sgp1",
"tor1"
],
"available": true,
"transfer": 1,
"description": "Basic"
},
"size_slug": "s-1vcpu-1gb",
"features": [
"droplet_agent",
"ipv6",
"private_networking"
],
"status": "active",
"networks": {
"v4": [
{
"ip_address": "147.182.158.169",
"netmask": "255.255.240.0",
"gateway": "147.182.144.1",
"type": "public"
},
{
"ip_address": "10.118.0.2",
"netmask": "255.255.240.0",
"gateway": "10.118.0.1",
"type": "private"
}
],
"v6": [
{
"ip_address": "2604:a880:cad:d0::e84:c001",
"netmask": 64,
"gateway": "2604:a880:cad:d0::1",
"type": "public"
}
]
},
"created_at": "2022-08-31T20:31:11Z",
"volume_ids": [],
"vpc_uuid": "949c2fe9-e680-4643-933c-12fe80b3dbc6"
}
]'
+ echo -n ''
+ echo -e '\tServerAliveInterval 60\n'
cat "$AXIOM_PATH/axiom.json" | jq -r '.sshkey'
++ cat /Users/chevy/.axiom/axiom.json
++ jq -r .sshkey
+ sshkey=axiom_rsa
+ echo -e 'IdentityFile /Users/chevy/.ssh/axiom_rsa'
cat "$AXIOM_PATH/axiom.json" | jq -r '.generate_sshconfig'
++ cat /Users/chevy/.axiom/axiom.json
++ jq -r .generate_sshconfig
+ generate_sshconfig=null
+ [[ null == \p\r\i\v\a\t\e ]]
+ [[ null == \c\a\c\h\e ]]
echo "$droplets" | jq -r '.[].name'
++ jq -r '.[].name'
++ echo '[
{
"id": 314838202,
"name": "stone16",
"memory": 1024,
"vcpus": 1,
"disk": 25,
"region": {
"slug": "tor1",
"name": "Toronto 1",
"sizes": [
"s-1vcpu-1gb",
"s-1vcpu-1gb-amd",
"s-1vcpu-1gb-intel",
"s-1vcpu-2gb",
"s-1vcpu-2gb-amd",
"s-1vcpu-2gb-intel",
"s-2vcpu-2gb",
"s-2vcpu-2gb-amd",
"s-2vcpu-2gb-intel",
"s-2vcpu-4gb",
"s-2vcpu-4gb-amd",
"s-2vcpu-4gb-intel",
"c-2",
"c2-2vcpu-4gb",
"s-4vcpu-8gb",
"s-4vcpu-8gb-amd",
"s-4vcpu-8gb-intel",
"g-2vcpu-8gb",
"gd-2vcpu-8gb",
"m-2vcpu-16gb",
"c-4",
"c2-4vcpu-8gb",
"s-8vcpu-16gb",
"m3-2vcpu-16gb",
"s-8vcpu-16gb-amd",
"s-8vcpu-16gb-intel",
"g-4vcpu-16gb",
"so-2vcpu-16gb",
"m6-2vcpu-16gb",
"gd-4vcpu-16gb",
"so1_5-2vcpu-16gb",
"m-4vcpu-32gb",
"c-8",
"c2-8vcpu-16gb",
"m3-4vcpu-32gb",
"g-8vcpu-32gb",
"so-4vcpu-32gb",
"m6-4vcpu-32gb",
"gd-8vcpu-32gb",
"so1_5-4vcpu-32gb",
"m-8vcpu-64gb",
"c-16",
"c2-16vcpu-32gb",
"m3-8vcpu-64gb",
"g-16vcpu-64gb",
"so-8vcpu-64gb",
"m6-8vcpu-64gb",
"gd-16vcpu-64gb",
"so1_5-8vcpu-64gb",
"m-16vcpu-128gb",
"c-32",
"c2-32vcpu-64gb",
"m3-16vcpu-128gb",
"c-48",
"m-24vcpu-192gb",
"g-32vcpu-128gb",
"so-16vcpu-128gb",
"m6-16vcpu-128gb",
"gd-32vcpu-128gb",
"c2-48vcpu-96gb",
"m3-24vcpu-192gb",
"g-40vcpu-160gb",
"so1_5-16vcpu-128gb",
"m-32vcpu-256gb",
"gd-40vcpu-160gb",
"so-24vcpu-192gb",
"m6-24vcpu-192gb",
"m3-32vcpu-256gb",
"so1_5-24vcpu-192gb",
"so-32vcpu-256gb",
"m6-32vcpu-256gb",
"so1_5-32vcpu-256gb"
],
"available": true,
"features": [
"backups",
"ipv6",
"metadata",
"install_agent",
"storage",
"image_transfer"
]
},
"image": {
"id": 115944010,
"name": "axiom-default-1661951687",
"type": "snapshot",
"distribution": "Ubuntu",
"regions": [
"tor1"
],
"min_disk_size": 25,
"size_gigabytes": 12.61,
"created_at": "2022-08-31T13:56:16Z",
"status": "available"
},
"size": {
"slug": "s-1vcpu-1gb",
"memory": 1024,
"vcpus": 1,
"disk": 25,
"price_monthly": 6,
"price_hourly": 0.00893,
"regions": [
"ams3",
"blr1",
"fra1",
"lon1",
"nyc1",
"nyc3",
"sfo3",
"sgp1",
"tor1"
],
"available": true,
"transfer": 1,
"description": "Basic"
},
"size_slug": "s-1vcpu-1gb",
"features": [
"droplet_agent",
"ipv6",
"private_networking"
],
"status": "active",
"networks": {
"v4": [
{
"ip_address": "147.182.158.169",
"netmask": "255.255.240.0",
"gateway": "147.182.144.1",
"type": "public"
},
{
"ip_address": "10.118.0.2",
"netmask": "255.255.240.0",
"gateway": "10.118.0.1",
"type": "private"
}
],
"v6": [
{
"ip_address": "2604:a880:cad:d0::e84:c001",
"netmask": 64,
"gateway": "2604:a880:cad:d0::1",
"type": "public"
}
]
},
"created_at": "2022-08-31T20:31:11Z",
"volume_ids": [],
"vpc_uuid": "949c2fe9-e680-4643-933c-12fe80b3dbc6"
}
]'
+ for name in '$(echo "$droplets" | jq -r '\''.[].name'\'')'
echo "$droplets" | jq -r ".[] | select(.name==\"$name\") | .networks.v4[] | select(.type==\"public\") | .ip_address"
++ echo '[
{
"id": 314838202,
"name": "stone16",
"memory": 1024,
"vcpus": 1,
"disk": 25,
"region": {
"slug": "tor1",
"name": "Toronto 1",
"sizes": [
"s-1vcpu-1gb",
"s-1vcpu-1gb-amd",
"s-1vcpu-1gb-intel",
"s-1vcpu-2gb",
"s-1vcpu-2gb-amd",
"s-1vcpu-2gb-intel",
"s-2vcpu-2gb",
++ jq -r '.[] | select(.name=="stone16") | .networks.v4[] | select(.type=="public") | .ip_address'
"s-2vcpu-2gb-amd",
"s-2vcpu-2gb-intel",
"s-2vcpu-4gb",
"s-2vcpu-4gb-amd",
"s-2vcpu-4gb-intel",
"c-2",
"c2-2vcpu-4gb",
"s-4vcpu-8gb",
"s-4vcpu-8gb-amd",
"s-4vcpu-8gb-intel",
"g-2vcpu-8gb",
"gd-2vcpu-8gb",
"m-2vcpu-16gb",
"c-4",
"c2-4vcpu-8gb",
"s-8vcpu-16gb",
"m3-2vcpu-16gb",
"s-8vcpu-16gb-amd",
"s-8vcpu-16gb-intel",
"g-4vcpu-16gb",
"so-2vcpu-16gb",
"m6-2vcpu-16gb",
"gd-4vcpu-16gb",
"so1_5-2vcpu-16gb",
"m-4vcpu-32gb",
"c-8",
"c2-8vcpu-16gb",
"m3-4vcpu-32gb",
"g-8vcpu-32gb",
"so-4vcpu-32gb",
"m6-4vcpu-32gb",
"gd-8vcpu-32gb",
"so1_5-4vcpu-32gb",
"m-8vcpu-64gb",
"c-16",
"c2-16vcpu-32gb",
"m3-8vcpu-64gb",
"g-16vcpu-64gb",
"so-8vcpu-64gb",
"m6-8vcpu-64gb",
"gd-16vcpu-64gb",
"so1_5-8vcpu-64gb",
"m-16vcpu-128gb",
"c-32",
"c2-32vcpu-64gb",
"m3-16vcpu-128gb",
"c-48",
"m-24vcpu-192gb",
"g-32vcpu-128gb",
"so-16vcpu-128gb",
"m6-16vcpu-128gb",
"gd-32vcpu-128gb",
"c2-48vcpu-96gb",
"m3-24vcpu-192gb",
"g-40vcpu-160gb",
"so1_5-16vcpu-128gb",
"m-32vcpu-256gb",
"gd-40vcpu-160gb",
"so-24vcpu-192gb",
"m6-24vcpu-192gb",
"m3-32vcpu-256gb",
"so1_5-24vcpu-192gb",
"so-32vcpu-256gb",
"m6-32vcpu-256gb",
"so1_5-32vcpu-256gb"
],
"available": true,
"features": [
"backups",
"ipv6",
"metadata",
"install_agent",
"storage",
"image_transfer"
]
},
"image": {
"id": 115944010,
"name": "axiom-default-1661951687",
"type": "snapshot",
"distribution": "Ubuntu",
"regions": [
"tor1"
],
"min_disk_size": 25,
"size_gigabytes": 12.61,
"created_at": "2022-08-31T13:56:16Z",
"status": "available"
},
"size": {
"slug": "s-1vcpu-1gb",
"memory": 1024,
"vcpus": 1,
"disk": 25,
"price_monthly": 6,
"price_hourly": 0.00893,
"regions": [
"ams3",
"blr1",
"fra1",
"lon1",
"nyc1",
"nyc3",
"sfo3",
"sgp1",
"tor1"
],
"available": true,
"transfer": 1,
"description": "Basic"
},
"size_slug": "s-1vcpu-1gb",
"features": [
"droplet_agent",
"ipv6",
"private_networking"
],
"status": "active",
"networks": {
"v4": [
{
"ip_address": "147.182.158.169",
"netmask": "255.255.240.0",
"gateway": "147.182.144.1",
"type": "public"
},
{
"ip_address": "10.118.0.2",
"netmask": "255.255.240.0",
"gateway": "10.118.0.1",
"type": "private"
}
],
"v6": [
{
"ip_address": "2604:a880:cad:d0::e84:c001",
"netmask": 64,
"gateway": "2604:a880:cad:d0::1",
"type": "public"
}
]
},
"created_at": "2022-08-31T20:31:11Z",
"volume_ids": [],
"vpc_uuid": "949c2fe9-e680-4643-933c-12fe80b3dbc6"
}
]'
+ ip=147.182.158.169
+ echo -e 'Host stone16\n\tHostName 147.182.158.169\n\tUser op\n\tPort 2266\n'
+ mv /Users/chevy/.axiom/.sshconfig.new30109 /Users/chevy/.axiom/.sshconfig
+ '[' '' '!=' null ']'
+ gen_app_sshconfig
+ echo ''
appliance_list
++ appliance_list
++ appliances
++ jq -r '.[].name'
++ curl -s /heartbeats/
++ jq
###########################################################################################################
# Store $args in $commands
#
commands="$args"
+ commands=' id'
###########################################################################################################
# If --tmux is in the command, connect to instance and spawn a new tmux session
#
if [[ $use_tmux == true ]] ;then
if [[ -z ${tmux_session_name:+x} ]]; then
tmux_session_name=$uid
fi
commands="tmux new-session -d -s $tmux_session_name \""$commands"\""
fi
+ [[ false == true ]]
###########################################################################################################
# Create temporary directories and set tmp path to be used for logs
#
completed="$tmp/status/completed/"
+ completed=/Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/status/completed/
inprogress="$tmp/status/inprogress/"
+ inprogress=/Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/status/inprogress/
mkdir -p "$tmp/input"
+ mkdir -p /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/input
mkdir -p "$tmp/split"
+ mkdir -p /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/split
mkdir -p "$tmp/output"
+ mkdir -p /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/output
mkdir -p "$tmp/logs"
+ mkdir -p /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/logs
mkdir -p "$completed"
+ mkdir -p /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/status/completed/
mkdir -p "$inprogress"
+ mkdir -p /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/status/inprogress/
mkdir -p "$tmp/status"
+ mkdir -p /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/status
###########################################################################################################
# cp the selected.conf to different file names ( one for Interlace, one for selected.conf)
# Make a copy of the current SSH config and use it for axiom-scan
#
cat "$AXIOM_PATH/selected.conf" >> "$tmp/hosts"
+ cat /Users/chevy/.axiom/selected.conf
cp "$tmp/hosts" "$tmp/selected.conf"
+ cp /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/selected.conf
cp "$sshconfig" "$tmp/sshconfig"
+ cp /Users/chevy/.axiom/.sshconfig /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig
sshconfig="$tmp/sshconfig"
+ sshconfig=/Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig
###########################################################################################################
# Create temporary SSH sockets to use with axiom-scan. An advantage of SSH multiplexing is that the overhead
# of creating new TCP connections and negotiating the secure connection is eliminated. This allow us to do
# subsequent SSH exec operations ( like downloading results etc ) with no additional overhead.
#
mkdir -p "$tmp/sockets"
+ mkdir -p /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sockets
socket_tmp=$(echo "$tmp/sockets")
echo "$tmp/sockets"
++ echo /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sockets
+ socket_tmp=/Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sockets
cat <<EOT >> $(echo $sshconfig)
Host *
ControlMaster auto
ControlPath $socket_tmp/%r@%h-%p
ControlPersist 600
EOT
+ cat
echo $sshconfig
++ echo /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig
###########################################################################################################
# if --fleet isnt provided or has null value, default to selected.conf
#
if [[ -z ${fleet:+x} ]]; then
total_instances="$(wc -l "$tmp/hosts" | awk '{ print $1 }')"
instances=$(cat "$tmp/hosts")
else
###########################################################################################################
# if --fleet value is non-null and the value is a file, use selected from file
#
if [[ -f "$fleet" ]] ; then
instances=$(cat "$fleet")
echo "$instances" | tr ' ' '\n' > "$tmp/hosts"
total_instances="$(wc -l "$tmp/hosts" | awk '{ print $1 }')"
###########################################################################################################
# else it must the fleet name
#
else
instances=$(query_instances_cache "$fleet*")
echo "$instances" | tr ' ' '\n' > "$tmp/hosts"
total_instances="$(wc -l "$tmp/hosts" | awk '{ print $1 }')"
fi
fi
+ [[ -z '' ]]
wc -l "$tmp/hosts" | awk '{ print $1 }'
++ wc -l /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts
++ awk '{ print $1 }'
+ total_instances=1
cat "$tmp/hosts"
++ cat /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts
+ instances=stone16
###########################################################################################################
# if --instance is provided, add it to total instances
#
if [[ $instance != false ]]; then
name=$(query_instances_cache "$instance")
echo "$name" | tr ' ' '\n' > "$tmp/hosts"
total_instances="$(wc -l "$tmp/hosts" | awk '{ print $1 }')"
fi
+ [[ false != false ]]
###########################################################################################################
# prepare the default SSH and interlace command and execute the user provided command in parallel
#
scan_dir="/tmp/exec/$uid"
+ scan_dir=/tmp/exec/axiom-exec+1661978323
ssh_command="ssh -F $sshconfig -o StrictHostKeyChecking=no -o PasswordAuthentication=no"
+ ssh_command='ssh -F /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig -o StrictHostKeyChecking=no -o PasswordAuthentication=no'
interlace_cmd="$(which interlace) -tL $tmp/hosts -threads $total_instances"
which interlace
++ which interlace
+ interlace_cmd=' -tL /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts -threads 1'
interlace_cmd_silent="$(which interlace) -tL $tmp/hosts --silent -threads $total_instances"
which interlace
++ which interlace
+ interlace_cmd_silent=' -tL /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts --silent -threads 1'
interlace_cmd_nobar="$(which interlace) --silent --no-bar -tL $tmp/hosts -threads $total_instances"
which interlace
++ which interlace
+ interlace_cmd_nobar=' --silent --no-bar -tL /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts -threads 1'
ssh_exit_command="ssh -F $sshconfig -O exit -o StrictHostKeyChecking=no"
+ ssh_exit_command='ssh -F /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig -O exit -o StrictHostKeyChecking=no'
###########################################################################################################
# prevents Interlace hangups from hijacking your terminal
#
stty -echoctl
+ stty -echoctl
trap clean_up SIGINT SIGTERM
+ trap clean_up SIGINT SIGTERM
###########################################################################################################
# preflight check
#
if [[ $pre_flight == true ]]; then
ssh_command_preflight="ssh -F $sshconfig -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o ConnectTimeout=$preflight_timeout"
$interlace_cmd_silent -c "$ssh_command_preflight _target_ 'echo _target_' >> $tmp/hosts_preflight"
cat "$tmp/hosts_preflight" | sort -u > "$tmp/hosts"
cp "$tmp/hosts_preflight" "$tmp/selected.conf"
fi
+ [[ true == true ]]
+ ssh_command_preflight='ssh -F /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o ConnectTimeout=5'
+ -tL /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts --silent -threads 1 -c 'ssh -F /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o ConnectTimeout=5 _target_ '\''echo _target_'\'' >> /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts_preflight'
/Users/chevy/.axiom/interact/axiom-exec: line 357: -tL: command not found
+ cat /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts_preflight
+ sort -u
cat: /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts_preflight: No such file or directory
+ cp /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts_preflight /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/selected.conf
cp: cannot stat '/Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts_preflight': No such file or directory
###########################################################################################################
# store bash command in a file and upload it to remote instances with axiom-scp
#
echo "$commands" > "$tmp/command"
+ echo ' id'
$interlace_cmd_nobar -c "$ssh_command _target_ 'mkdir -p $scan_dir'" >/dev/null 2>&1
+ --silent --no-bar -tL /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts -threads 1 -c 'ssh -F /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig -o StrictHostKeyChecking=no -o PasswordAuthentication=no _target_ '\''mkdir -p /tmp/exec/axiom-exec+1661978323'\'''
$interlace_cmd_nobar -c "axiom-scp $tmp/command _target_:$scan_dir/command --cache -F=$sshconfig >/dev/null 2>&1; touch $tmp/logs/_target_"
+ --silent --no-bar -tL /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts -threads 1 -c 'axiom-scp /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/command _target_:/tmp/exec/axiom-exec+1661978323/command --cache -F=/Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig >/dev/null 2>&1; touch /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/logs/_target_'
/Users/chevy/.axiom/interact/axiom-exec: line 368: --silent: command not found
###########################################################################################################
# this function is spanwed in the background and periodically probes all instances to see if their part of the exec has completed.
# when the remote exec process has finished, it creates a file named $(hostname) in the remote exec working directory. During the
# exec if axiom see's the $(hostname) file, break the loop and exit
#
function downloader () {
while true; do
sleep 2
$interlace_cmd_nobar -c "axiom-scp _target_:$scan_dir/_target_ $tmp/status/inprogress/_target_ --cache -F=$sshconfig >/dev/null 2>&1"
ls $tmp/status/inprogress/ | anew -q $tmp/status/completed/hosts
cat $tmp/status/completed/hosts | sort -u | wc -l | tee $tmp/status/downloader_instances >/dev/null 2>&1
cat $tmp/status/completed/hosts | sort -u | tee $tmp/status/downloader_hosts >/dev/null 2>&1
if [[ "$(cat $tmp/status/downloader_instances)" -eq "0" ]]; then
sleep 2
downloader
fi
downloader_cmd="$(which interlace) --no-bar --silent -tL $tmp/status/downloader_hosts -threads $(cat $tmp/status/downloader_instances)"
if [[ "$commands" =~ "_target_" ]]; then
$downloader_cmd -c "axiom-scp _target_:$scan_dir/output/ $tmp/output/ --cache -F=$sshconfig >/dev/null 2>&1"
else
$downloader_cmd -c "axiom-scp _target_:$scan_dir/output $tmp/output/_target_.$ext --cache -F=$sshconfig >/dev/null 2>&1"
fi
mv $tmp/status/completed/hosts $tmp/status/completed/hosts.tmp
cat $tmp/status/completed/hosts.tmp | sort -u >> $tmp/status/completed/hosts
if cmp -s $tmp/status/completed/hosts $tmp/hosts ; then
kill -9 $(cat $tmp/status/remotetailPID) >> /dev/null 2>&1
wait $(cat $tmp/status/remotetailPID) >> /dev/null 2>&1
break >> /dev/null 2>&1
else
downloader
fi
done
}
###########################################################################################################
# interactive mode flag
#
if [[ "$quick_execution" == "false" ]]; then
###########################################################################################################
# dont tail if quiet is true
#
if [[ "$quiet" == "false" ]]; then
tail -q -f $tmp/logs/* &
tailPID=$!
fi
###########################################################################################################
# disable progress bar, reduce verbosity, only terminal output of the command is returned to terminal
#
touch $tmp/status/completed/hosts
touch $tmp/status/completed/status
sleep 3
downloader &
downloaderPID=$!
$interlace_cmd_nobar -c "$ssh_command _target_ 'cd $scan_dir && touch stderr.log stdout.log && tail -f stderr.log & tail -f stdout.log' >> $tmp/logs/_target_ 2>&1 " &
remotetailPID=$!
echo $remotetailPID > $tmp/status/remotetailPID
if [[ "$nobar" == "false" ]]; then
$interlace_cmd -c "$ssh_command _target_ 'tmux new -d -s $uid && tmux send-keys -t $uid \"bash -i $scan_dir/command > >(tee -a $scan_dir/stdout.log) 2> >(tee -a $scan_dir/stderr.log >&2) ; touch $scan_dir/_target_\" ENTER ' \"&& tmux send-keys -t $uid exit ENTER\""
wait $remotetailPID >> /dev/null 2>&1
else
$interlace_cmd_silent -c "$ssh_command _target_ 'tmux new -d -s $uid && tmux send-keys -t $uid \"bash -i $scan_dir/command > >(tee -a $scan_dir/stdout.log) 2> >(tee -a $scan_dir/stderr.log >&2) ; touch $scan_dir/_target_\" ENTER ' \"&& tmux send-keys -t $uid exit ENTER\""
wait $remotetailPID >> /dev/null 2>&1
fi
###########################################################################################################
# interactive mode logic
#
else
if [[ "$nobar" == "false" ]]; then
$interlace_cmd -c "$ssh_command _target_ '$commands'"
pid=$!
else
$interlace_cmd_nobar -c "$ssh_command _target_ '$commands'"
pid=$!
fi
fi
+ [[ false == \f\a\l\s\e ]]
+ [[ false == \f\a\l\s\e ]]
+ tailPID=55785
+ touch /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/status/completed/hosts
+ tail -q -f '/Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/logs/*'
tail: cannot open '/Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/logs/*' for reading: No such file or directory
tail: no files remaining
+ touch /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/status/completed/status
+ sleep 3
+ downloaderPID=55791
+ downloader
+ true
+ sleep 2
+ remotetailPID=55792
+ echo 55792
+ [[ false == \f\a\l\s\e ]]
+ --silent --no-bar -tL /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts -threads 1 -c 'ssh -F /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig -o StrictHostKeyChecking=no -o PasswordAuthentication=no _target_ '\''cd /tmp/exec/axiom-exec+1661978323 && touch stderr.log stdout.log && tail -f stderr.log & tail -f stdout.log'\'' >> /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/logs/_target_ 2>&1 '
+ -tL /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts -threads 1 -c 'ssh -F /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig -o StrictHostKeyChecking=no -o PasswordAuthentication=no _target_ '\''tmux new -d -s axiom-exec+1661978323 && tmux send-keys -t axiom-exec+1661978323 "bash -i /tmp/exec/axiom-exec+1661978323/command > >(tee -a /tmp/exec/axiom-exec+1661978323/stdout.log) 2> >(tee -a /tmp/exec/axiom-exec+1661978323/stderr.log >&2) ; touch /tmp/exec/axiom-exec+1661978323/_target_" ENTER '\'' "&& tmux send-keys -t axiom-exec+1661978323 exit ENTER"'
/Users/chevy/.axiom/interact/axiom-exec: line 425: --silent: command not found
/Users/chevy/.axiom/interact/axiom-exec: line 430: -tL: command not found
+ wait 55792
###########################################################################################################
# keep logs flag aka --logs
#
mv "$tmp" "$logs">/dev/null 2>&1
+ mv /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323 /Users/chevy/.axiom/logs/exec/axiom-exec+1661978323
if [[ $keep_logs != true ]]; then
rm -r $logs >/dev/null 2>&1
fi
+ [[ false != true ]]
+ rm -r /Users/chevy/.axiom/logs/exec/axiom-exec+1661978323
###########################################################################################################
# kill tmux sessions with any orphaned proceses
#
$interlace_cmd_nobar -c "$ssh_command _target_ 'tmux kill-session -t $uid'" >/dev/null 2>&1
+ --silent --no-bar -tL /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts -threads 1 -c 'ssh -F /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig -o StrictHostKeyChecking=no -o PasswordAuthentication=no _target_ '\''tmux kill-session -t axiom-exec+1661978323'\'''
$interlace_cmd_nobar -c "$ssh_exit_command _target_ " >/dev/null 2>&1
+ --silent --no-bar -tL /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/hosts -threads 1 -c 'ssh -F /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sshconfig -O exit -o StrictHostKeyChecking=no _target_ '
###########################################################################################################
# house keeping
#
rm -r $socket_tmp >/dev/null 2>&1
+ rm -r /Users/chevy/.axiom/tmp/exec/axiom-exec+1661978323/sockets
kill -0 $remotetailPID 2> /dev/null && kill -9 $remotetailPID &> /dev/null
+ kill -0 55792
kill -0 $tailPID 2> /dev/null && kill -9 $tailPID &> /dev/null
+ kill -0 55785
kill -0 $downloaderPID 2> /dev/null && kill -9 $downloaderPID &> /dev/null
+ kill -0 55791
+ kill -9 55791
wait $tailPID 2>/dev/null
+ wait 55785
wait $downloaderPID 2>/dev/null
+ wait 55791
stty sane
+ stty sane
tput init
+ tput init
Thanks! Do you have Interlace installed and is it in your path? It should have automatically installed during axiom-configure
. What OS are you using as a controller and how did you install axiom? @chevonmdphillip
Instances have been selected.