Руководство по декодированию Base64 с использованием ash в BusyBox

Как передать файлы через SSH с использованием Base64

Перемещение файлов на сервер через SSH может представлять определенные сложности, особенно если у вас есть доступ только к единственному сеансу, и вы не хотите терять связь с сервером. В этом руководстве мы рассмотрим, как закодировать файл в формат Base64 и передать его через терминал.

Почему Base64?

Преобразование файла в формат Base64 позволяет передавать данные в текстовом виде, что может оказаться полезным в средах, где бинарные данные могут быть испорчены или неправильно интерпретированы. Кроме того, данный метод особенно актуален, если у вас ограниченные возможности доступа к серверу.

Подготовка к передаче файла

Для начала вам необходимо закодировать файл в формат Base64. Это можно сделать с помощью различных утилит, однако, если у вас только среда BusyBox, может не быть доступной стандартной команды base64. В данном случае мы используем awk скрипт для декодирования на стороне сервера.

Декодирование Base64 с помощью AWK

Если у вас нет возможности воспользоваться встроенной командой base64, вы можете использовать следующий скрипт на awk, чтобы декодировать файл:

# base64decode.awk
#
# Introduction
# ============
# Decode Base64-encoded strings.
#
# Invocation
# ==========
# Typically you run the script like this:
#
#     $ awk -f base64decode.awk [file1 [file2 [...]]] > output

# create our lookup table
BEGIN {
    # load symbols based on the alphabet
    for (i=0; i<26; i++) {
        BASE64[sprintf("%c", i+65)] = i
        BASE64[sprintf("%c", i+97)] = i+26
    }
    # load our numbers
    for (i=0; i<10; i++) {
        BASE64[sprintf("%c", i+48)] = i+52
    }
    # and finally our two additional characters
    BASE64["+"] = 62
    BASE64["/"] = 63
    # also add in our padding character
    BASE64["="] = -1
}

# The main function to decode Base64 data.
# Arguments:
# * encoded - the Base64 string
# * result - an array to return the binary data in
function base64decode(encoded, result) {
    n = 1
    while (length(encoded) >= 4) {
        g0 = BASE64[substr(encoded, 1, 1)]
        g1 = BASE64[substr(encoded, 2, 1)]
        g2 = BASE64[substr(encoded, 3, 1)]
        g3 = BASE64[substr(encoded, 4, 1)]
        # Проверка на некорректные символы
        if (g0 == "") { printf("Unrecognized character %c in Base 64 encoded string\n", g0) >> "/dev/stderr"; exit 1 }
        if (g1 == "") { printf("Unrecognized character %c in Base 64 encoded string\n", g1) >> "/dev/stderr"; exit 1 }
        if (g2 == "") { printf("Unrecognized character %c in Base 64 encoded string\n", g2) >> "/dev/stderr"; exit 1 }
        if (g3 == "") { printf("Unrecognized character %c in Base 64 encoded string\n", g3) >> "/dev/stderr"; exit 1 }

        # Декодирование данных
        result[n++] = (g0 * 4) + int(g1 / 16)
        if (g2 != -1) {
            result[n++] = ((g1 * 16) % 256) + int(g2 / 4)
            if (g3 != -1) {
                result[n++] = ((g2 * 64) % 256) + g3
            }
        }

        encoded = substr(encoded, 5)
    }
    # Проверка на лишние символы
    if (length(encoded) != 0) {
        printf("Extra characters at end of Base 64 encoded string: \"%s\"\n", encoded) >> "/dev/stderr"
        exit 1
    }
}

# Основная обработка текста
{
    # Декодируем то, что мы прочитали
    base64decode($0, result)
    # Выводим декодированную строку
    printf_str = ""
    for (i=1; i in result; i++) {
        printf_str = printf_str sprintf("\\%03o", result[i])
        if (length(printf_str) >= 1024) {
            system("printf '" printf_str "'")
            printf_str = ""
        }
        delete result[i]
    }
    system("printf '" printf_str "'")
}

Как использовать скрипт

Чтобы воспользоваться данным скриптом для декодирования файла, выполните следующую команду после подключения к серверу через SSH:

awk -f base64decode.awk [файл с Base64] > output_file

Этот код декодирует содержимое файла, закодированное в Base64, и сохраняет результат в output_file.

Заключение

Передача файлов через SSH может быть довольно простой задачей, если вы знаете, как использовать Base64. Применяя предложенные методы, вы сможете сохранить доступ к своему серверу и при этом успешно передать необходимые данные.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *