Мне нужно запустить скрипт на удаленном сервере, который требует root-доступа, используя sshpass, и он не выполняется.

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

Мне нужно запустить скрипт на удаленном сервере, который требует root-доступа, используя sshpass, и возникла ошибка “скрипт не найден”. Я запустил следующую команду:
sshpass -frhelpass ssh user@IP ‘echo mypass | sudo -S “bash -s” < "./pv.sh"' Только авторизованные пользователи. Вся активность может быть отслежена и зафиксирована. bash: pv.ksh: Нет такого файла или директории

Если я скопирую скрипт удаленно (я могу скопировать скрипт), но выполнение не удается.

/downloads$ sshpass -frhelpass ssh user@IP ‘echo mypass | sudo -Sv && ‘bash -s’ < /tmp/pv.sh' Только авторизованные пользователи. Вся активность может быть отслежена и зафиксирована. [sudo] пароль для user: ВНИМАНИЕ: запуск от имени пользователя без root-доступа. Функциональность может быть недоступна. /run/lock/lvm/P_global:aux: ошибка открытия: Доступ запрещен

Я выполняю эти команды из командной строки ubuntu

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

Для решения задачи запуска скрипта на удаленном сервере с требуемым root-доступом через sshpass, который завершатся ошибкой, необходимо внимательно проанализировать предоставленные команды и выявить возможные проблемы. А также предложить способы их исправления. Рассмотрим детально каждый шаг.

Теория:

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

Основными факторами, которые вам необходимо учесть:

  1. Правильная передача скрипта и пути к нему.
  2. Корректная обработка ввода пароля для команд, требующих sudo.
  3. Проверка привилегий и корректных разрешений для выполнения необходимых операций.

Пример:

В вашем случае команда:

sshpass -frhelpass ssh user@IP 'echo mypass | sudo -S "bash -s" < "./pv.sh"'

не может найти скрипт pv.sh, так как путь передан неправильно. Когда вы используете конструкцию с <, это относится к локальным файлам на вашей машине, и причина ошибки — скрипт просто не найден на вашем локальном компьютере.

В вашей второй попытке:

sshpass -frhelpass ssh user@IP 'echo mypass | sudo -Sv && 'bash -s' < /tmp/pv.sh'

уже скрипт находится на удаленной машине, но команда все еще может не работать корректно из-за неудачной обработки sudo ввода пароля и возможных недостатков в правах доступа при исполнении команд от имени root.

Применение:

Для корректного выполнения сценария вашего скрипта, следует придерживаться следующего плана:

  1. Копирование скрипта на удаленный сервер:

    Первым шагом, скопируйте ваш скрипт на удаленный сервер в директорию, к которой есть доступ у пользователя:

    scp ./pv.sh user@IP:/tmp
  2. Устранение проблем с вводом пароля для sudo:

    Чтобы избавиться от необходимости ввода пароля для sudo, вы можете временно конфигурировать sudo без пароля для определенного пользователя и команды. Для этого добавьте следующую строку в файл /etc/sudoers с помощью visudo, чтобы избежать ошибок конфигурации:

    user ALL=(ALL) NOPASSWD: /bin/bash /tmp/pv.sh

    Важно: следите за тем, чтобы это была временная мера для выполнения конкретной задачи.

  3. Запустить скрипт через SSH:

    После того как скрипт будет скопирован, выполните команду на удаленном сервере:

    sshpass -frhelpass ssh user@IP 'sudo /bin/bash /tmp/pv.sh'

    Таким образом, вы избежите возможных проблем с вводом пароля для sudo и права на его выполнение.

  4. Проверка на ошибки и корректировка кода:

    Пройдитесь по содержимому вашего скрипта pv.sh и удостоверьтесь, что он самостоятельно не вызывает операций, требующих других привилегий, кроме тех, которые уже даны.

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

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

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