mirror of
https://gitee.com/jack_whh/ssh-scp-ssh-pipelines.git
synced 2026-03-09 22:42:55 +08:00
use python
This commit is contained in:
144
entrypoint.sh
Normal file → Executable file
144
entrypoint.sh
Normal file → Executable file
@@ -1,149 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
createKeyFile() {
|
||||
local SSH_PATH="$HOME/.ssh"
|
||||
|
||||
mkdir -p "$SSH_PATH"
|
||||
touch "$SSH_PATH/known_hosts"
|
||||
|
||||
echo "$INPUT_KEY" > "$SSH_PATH/id_rsa"
|
||||
|
||||
chmod 700 "$SSH_PATH"
|
||||
chmod 600 "$SSH_PATH/known_hosts"
|
||||
chmod 600 "$SSH_PATH/id_rsa"
|
||||
|
||||
eval $(ssh-agent)
|
||||
ssh-add "$SSH_PATH/id_rsa"
|
||||
|
||||
ssh-keyscan -t rsa "$INPUT_HOST" >> "$SSH_PATH/known_hosts"
|
||||
}
|
||||
|
||||
executeSSH() {
|
||||
local USEPASS=$1
|
||||
local LINES=$2
|
||||
local COMMAND=""
|
||||
|
||||
# holds all commands separated by semi-colon or keep "&&"
|
||||
local COMMANDS=""
|
||||
|
||||
# this while read each commands in line and
|
||||
# evaluate each line against all environment variables
|
||||
while IFS= read -r LINE; do
|
||||
LINE=$(echo $LINE)
|
||||
if [[ -z "${LINE}" ]]; then
|
||||
continue
|
||||
fi
|
||||
COMBINE="&&"
|
||||
LASTCOMBINE=""
|
||||
if [[ $LINE =~ ^.*\&\&$ ]]; then
|
||||
LINE="$LINE true"
|
||||
LASTCOMBINE="&&"
|
||||
elif [[ $LINE =~ ^\&\&.*$ ]]; then
|
||||
LINE="true $LINE"
|
||||
elif [[ $LINE =~ ^.*\|\|$ ]]; then
|
||||
LINE="$LINE false"
|
||||
LASTCOMBINE="||"
|
||||
elif [[ $LINE =~ ^\|\|.*$ ]]; then
|
||||
LINE="false $LINE"
|
||||
COMBINE="||"
|
||||
fi
|
||||
LINE=$(eval 'echo "$LINE"')
|
||||
if ! [[ $LINE =~ ^\(.*\)$ ]]; then
|
||||
LINE=$(eval echo "$LINE")
|
||||
fi
|
||||
LINE="$LINE $LASTCOMBINE"
|
||||
|
||||
if [ -z "$COMMANDS" ]; then
|
||||
COMMANDS="$LINE"
|
||||
else
|
||||
# ref. https://unix.stackexchange.com/questions/459923/multiple-commands-in-sshpass
|
||||
if [[ $COMMANDS =~ ^.*\&\&$ ]] || [[ $COMMANDS =~ ^.*\|\|$ ]]; then
|
||||
COMMANDS="$COMMANDS $LINE"
|
||||
else
|
||||
COMMANDS="$COMMANDS $COMBINE $LINE"
|
||||
fi
|
||||
fi
|
||||
done <<< "$LINES"
|
||||
|
||||
if [[ $COMMANDS =~ ^.*\&\&$ ]]; then
|
||||
COMMANDS="$COMMANDS true"
|
||||
elif [[ $COMMANDS =~ ^.*\|\|$ ]]; then
|
||||
COMMANDS="$COMMANDS false"
|
||||
fi
|
||||
echo "$COMMANDS"
|
||||
|
||||
CMD="ssh"
|
||||
if $USEPASS; then
|
||||
CMD="sshpass -p $INPUT_PASS ssh"
|
||||
fi
|
||||
$CMD -o StrictHostKeyChecking=no -o ConnectTimeout=${INPUT_CONNECT_TIMEOUT:-30s} -p "${INPUT_PORT:-22}" "$INPUT_USER"@"$INPUT_HOST" "$COMMANDS" > /dev/stdout
|
||||
}
|
||||
|
||||
executeSCP() {
|
||||
local USEPASS=$1
|
||||
local LINES=$2
|
||||
local COMMAND=
|
||||
|
||||
CMD="scp"
|
||||
if $USEPASS; then
|
||||
CMD="sshpass -p $INPUT_PASS scp"
|
||||
fi
|
||||
|
||||
while IFS= read -r LINE; do
|
||||
delimiter="=>"
|
||||
LINE=$(echo $LINE)
|
||||
if [[ -z "${LINE}" ]]; then
|
||||
continue
|
||||
fi
|
||||
s=$LINE$delimiter
|
||||
arr=()
|
||||
while [[ $s ]]; do
|
||||
arr+=( "${s%%"$delimiter"*}" );
|
||||
s=${s#*"$delimiter"};
|
||||
done;
|
||||
LOCAL=$(eval 'echo "${arr[0]}"')
|
||||
LOCAL=$(eval echo "$LOCAL")
|
||||
REMOTE=$(eval 'echo "${arr[1]}"')
|
||||
REMOTE=$(eval echo "$REMOTE")
|
||||
|
||||
if [[ -z "${LOCAL}" ]] || [[ -z "${REMOTE}" ]]; then
|
||||
echo "LOCAL/REMOTE can not be parsed $LINE"
|
||||
else
|
||||
echo "Copying $LOCAL ---> $REMOTE"
|
||||
$CMD -r -o StrictHostKeyChecking=no -o ConnectTimeout=${INPUT_CONNECT_TIMEOUT:-30s} -P "${INPUT_PORT:-22}" $LOCAL "$INPUT_USER"@"$INPUT_HOST":$REMOTE > /dev/stdout
|
||||
fi
|
||||
done <<< "$LINES"
|
||||
}
|
||||
|
||||
|
||||
######################################################################################
|
||||
|
||||
echo "+++++++++++++++++++STARTING PIPELINES+++++++++++++++++++"
|
||||
|
||||
USEPASS=true
|
||||
if [[ -z "${INPUT_KEY}" ]]; then
|
||||
echo "+++++++++++++++++++Use password+++++++++++++++++++"
|
||||
else
|
||||
echo "+++++++++++++++++++Create Key File+++++++++++++++++++"
|
||||
USEPASS=false
|
||||
createKeyFile || false
|
||||
fi
|
||||
|
||||
if ! [[ -z "${INPUT_FIRST_SSH}" ]]; then
|
||||
echo "+++++++++++++++++++Step 1: RUNNING SSH+++++++++++++++++++"
|
||||
executeSSH "$USEPASS" "$INPUT_FIRST_SSH" || false
|
||||
fi
|
||||
|
||||
if ! [[ -z "${INPUT_SCP}" ]]; then
|
||||
echo "+++++++++++++++++++Step 2: RUNNING SCP+++++++++++++++++++"
|
||||
executeSCP "$USEPASS" "$INPUT_SCP" || false
|
||||
fi
|
||||
|
||||
if ! [[ -z "${INPUT_LAST_SSH}" ]]; then
|
||||
echo "+++++++++++++++++++Step 3: RUNNING SSH+++++++++++++++++++"
|
||||
executeSSH "$USEPASS" "$INPUT_LAST_SSH" || false
|
||||
fi
|
||||
python3 /opt/tools/app.py
|
||||
|
||||
echo "+++++++++++++++++++END PIPELINES+++++++++++++++++++"
|
||||
|
||||
Reference in New Issue
Block a user