LINUX.ORG.RU
ФорумAdmin

Удалённое добавление строки в файл по SSH с использованием sudo

 , , ,


0

3

Доброе утро. Стоит задача добавить в конфигурационный файл строку на множестве компьютеров. Пытаюсь сделать это так:

sshpass -p "$password" ssh -o "StrictHostKeyChecking=no" "$login"@"$ip_address" "echo $password | sudo -S echo "Test" >> $remote_file_for_configure" | tee -a "$temp_file"

В итоге получаю: bash: /etc/crontab: Отказано в доступе.

Многие другие команды отрабатывают таким способом нормально. Но вот именно echo почему то спотыкается (printf тоже пробовал). Буду благодарен, если подскажете причину.

sudo -S echo «Test» >> $remote_file_for_configure"

здесь файл будет открыт до применения sudo, т.е. не рутом, поэтому в доступе отказано. Используй tee

futurama ★★★★★
()

Но вот именно echo почему то спотыкается (printf тоже пробовал).

echo и printf выводит символы на стандартный вывод, то есть вызов их через sudo ничего не меняет. Операция переназначения стандартного вывода в файл выполняется не командой echo/printf, а интерпретатором командного языка. Раз уж любите tee, то попробуйте заменить

sudo -S echo  "Test" >> "$remote_file_for_configure"
на
echo  "Test" | sudo -S tee -a "$remote_file_for_configure" > /dev/null

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

Спасибо, это помогло. Немного правда пришлось по другому сделать, потому что echo ведь должен ещё передать пароль для sudo. Получилась вот такая конструкция:

sshpass -p "$password" ssh -o "StrictHostKeyChecking=no" "$login"@"$ip_address" "echo $password | sudo -S echo '#Test' | sudo -S tee -a $remote_file_for_configure" | tee -a "$temp_file"
eol3000
() автор топика
Ответ на: комментарий от vodz

А не, не прокатило. В первый раз отработало нормально, а при втором тестовом запуске запросило пароль. Ладно, буду тогда обходным путём, типа сохранения строки в отдельный файл, и затем выводом с помощью cat в конфигурационный файл.

eol3000
() автор топика
Ответ на: комментарий от eol3000

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

или

ssh user@remote ‘bash -s’ < script_to_run_on_remote.sh

futurama ★★★★★
()

sshpass -p
echo $password|sudo

Умоляю, хватит

Bers666 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.