diff --git a/tools/pi_control/terminal_entry.sh b/tools/pi_control/terminal_entry.sh index 7520404..624e1ab 100644 --- a/tools/pi_control/terminal_entry.sh +++ b/tools/pi_control/terminal_entry.sh @@ -54,18 +54,17 @@ fi SSH_TARGET="${USER}@${HOST}" if [[ -n "${COMMAND}" ]]; then - REMOTE_CMD="${COMMAND}; exec /bin/bash -il" - REMOTE_CMD="${REMOTE_CMD//\\/\\\\}" - REMOTE_CMD="${REMOTE_CMD//\"/\\\"}" + COMMAND_B64="$(printf '%s' "${COMMAND}" | base64)" + REMOTE_CMD='CMD_B64="$1"; CMD="$(printf "%s" "${CMD_B64}" | base64 -d)"; eval "${CMD}"; exec /bin/bash -il' if [[ "${AUTH_TYPE}" == "key" && -n "${KEY_PATH}" ]]; then - exec ssh "${SSH_OPTS[@]}" -i "${KEY_PATH}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/bash -lc "${REMOTE_CMD}" || \ - exec ssh "${SSH_OPTS[@]}" -i "${KEY_PATH}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/sh -lc "${REMOTE_CMD}" + exec ssh "${SSH_OPTS[@]}" -i "${KEY_PATH}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/bash -lc "${REMOTE_CMD}" -- "${COMMAND_B64}" || \ + exec ssh "${SSH_OPTS[@]}" -i "${KEY_PATH}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/sh -lc "${REMOTE_CMD}" -- "${COMMAND_B64}" elif [[ "${AUTH_TYPE}" == "pass" && -n "${PASSWORD}" ]]; then - exec sshpass -p "${PASSWORD}" ssh "${SSH_OPTS[@]}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/bash -lc "${REMOTE_CMD}" || \ - exec sshpass -p "${PASSWORD}" ssh "${SSH_OPTS[@]}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/sh -lc "${REMOTE_CMD}" + exec sshpass -p "${PASSWORD}" ssh "${SSH_OPTS[@]}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/bash -lc "${REMOTE_CMD}" -- "${COMMAND_B64}" || \ + exec sshpass -p "${PASSWORD}" ssh "${SSH_OPTS[@]}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/sh -lc "${REMOTE_CMD}" -- "${COMMAND_B64}" else - exec ssh "${SSH_OPTS[@]}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/bash -lc "${REMOTE_CMD}" || \ - exec ssh "${SSH_OPTS[@]}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/sh -lc "${REMOTE_CMD}" + exec ssh "${SSH_OPTS[@]}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/bash -lc "${REMOTE_CMD}" -- "${COMMAND_B64}" || \ + exec ssh "${SSH_OPTS[@]}" -p "${PORT:-22}" -tt "${SSH_TARGET}" -- /bin/sh -lc "${REMOTE_CMD}" -- "${COMMAND_B64}" fi else if [[ "${AUTH_TYPE}" == "key" && -n "${KEY_PATH}" ]]; then