Какие варианты передачи пакета от исходной машины к целевой через сеть с использованием только входа в систему под пользователем sudo по ssh?

Вопрос или проблема

Структура папки adm package:

/opt/adm
├── bin
├── cli
├── dev
├── mod
├── pkg
└── sys
root@deb4 /opt/adm
# rwx

 Для изменения прав доступа используйте следующий синтаксис команды:
 $ sudo chmod <октальное> <имя_файла/имя_папки>

 ПОЛЬЗОВАТЕЛЬ = root  ГРУППЫ = root

 ПРАВА |  ОКТАЛЬ | ВЛАДЕЛЕЦ      ГРУППА        ИМЯ
 drwxr-xr-x |   755  | root         root         .
 drwxr-xr-x |   755  | root         root         ..
 drwxr-xr-x |   755  | root         root         bin
 drwxr-xr-x |   755  | root         root         cli
 drwxr-xr-x |   755  | root         root         dev
 drwxr-xr-x |   755  | root         root         mod
 drwxr-xr-x |   755  | root         root         pkg
 drwxr-xr-x |   755  | root         root         sys

На моей рабочей машине adm package содержит пользовательские bash-скрипты в bin; текстовые файлы в cli; и файлы настройки пакета в mod. Скрипт rwx существует в bin. Любой пользователь на хост-машине может выполнить скрипт rwx, чтобы проверить октальные права доступа в текущем рабочем каталоге, как показано выше.

В общем, adm package позволяет пользователям на хост-машине запускать bash-скрипты, хранящиеся в bin, из командной строки; читать текстовые файлы в cli; и читать текстовые файлы в sys. Папка dev предназначена для разработки и тестирования новых bash-скриптов перед их переносом в bin. Идея этого пакета заключается в том, чтобы научить принципам настройки bash, bash-скриптов и администрирования Linux, используя bin для предоставления ресурсов и примеров скриптов; cli для хранения заметок; и sys для хранения заметок по конфигурации системы.

Я не являюсь опытным пользователем или экспертом по bash-скриптам. Поэтому пакет и скрипты могут нуждаться в улучшении и обратной связи от сообщества bash для их разработки и оценки в учебных целях. На данный момент пакет является частным. Возможно, когда-нибудь я опубликую его на Github.

У меня есть два bash-скрипта в bin, чтобы передать весь adm package на другую целевую машину на базе debian. Эти скрипты используют rsync и tar соответственно, чтобы показать планируемый запуск, а затем выполнить передачу. Скрипт на основе tar перезаписывает все существующие файлы с одинаковыми именами на исходной и целевой машинах. Скрипт на основе rsync обновляет только файлы, которые ещё не существуют. Я предпочитаю rsync. Оба скрипта работают нормально, если я включил вход с паролем root через ssh для целевой машины и установил rsync на целевой машине, если он там еще не установлен.

У меня есть машина, которая блокирует вход с паролем root через ssh. Я могу войти только как пользователь sudo. Какие у меня есть варианты скопировать adm package в /opt/adm на целевой машине, имея возможность входа только с помощью пользователя sudo через ssh? Должен ли я использовать ключи для входа как root? Или есть способ передать tar-файл adm.tar, а затем разархивировать файл, используя sudo на целевой машине?

Ответ или решение

Для передачи пакета adm с одного компьютера на другой через сеть с использованием только SSH-доступа для пользователя с правами sudo, у вас есть несколько вариантов. Вы можете использовать такие инструменты, как rsync, scp или tar, в сочетании с командами sudo.

  1. Использование rsync:
    rsync является мощным инструментом для синхронизации файлов и директорий. Если rsync установлен на обеих машинах, вы можете использовать следующим образом:

    rsync -avz /opt/adm/ sudo_user@target_machine:/opt/adm/ --rsync-path="sudo rsync"

    В этом примере:

    • -a — архивный режим, который сохраняет права доступа и временные метки файлов.
    • -v — выводит подробную информацию о процессе.
    • -z — сжимает данные во время передачи.
    • sudo_user — имя пользователя с правами sudo на целевой машине.
    • target_machine — адрес целевой машины.

    --rsync-path="sudo rsync" указывает rsync, что на целевой машине необходимо запускать команду с sudo.

  2. Использование scp:
    Другой способ — это использование scp для передачи архива tar. Вы можете предварительно упаковать директорию adm в tar-архив на исходной машине:

    tar -czf adm.tar.gz -C /opt adm

    Затем вы можете передать его на целевую машину:

    scp adm.tar.gz sudo_user@target_machine:/tmp/

    После передачи вы можете подключиться к целевой машине и распаковать архив с правами sudo:

    ssh sudo_user@target_machine
    sudo tar -xzf /tmp/adm.tar.gz -C /opt/
  3. Использование ssh с конвейером:
    Вы также можете использовать непосредственно SSH с конвейером, чтобы передать файлы:

    tar czf - -C /opt adm | ssh sudo_user@target_machine "sudo tar xzf - -C /opt/"

    В этом примере:

    • tar czf - -C /opt adm создает tar-архив в стандартный вывод.
    • ssh передает этот вывод на целевую машину, где sudo tar xzf - распаковывает архив в /opt/.
  4. Использование SSH-ключей (опционально):
    Если вы часто будете передавать файлы, рассмотрите возможность настройки SSH-ключей для автоматизации процесса входа на целевую машину. Это упростит использование rsync и других команд, так как вам не придется вводить пароль каждый раз. Вы можете сгенерировать пару ключей и добавить открытый ключ в файл authorized_keys на целевой машине.

В заключение, у вас есть несколько способов для передачи пакета adm на другую машину при использовании SSH-доступа через пользователя с правами sudo. Выбор подходящего метода зависит от ваших предпочтений и конфигурации системы.

Оцените материал
Добавить комментарий

Капча загружается...