Привет, я новичок в linux / bash в целом, и у меня возникли проблемы с написанием скрипта для моего коллеги. Идея этого сценария - помочь автоматизировать записи в таблице IP-адресов коллег (я не использую таблицы IP-адресов, поэтому не знаю, как это работает, просто работая в соответствии с его инструкциями). Программа задаст несколько вопросов, сформирует запись и затем добавит ее в файл на другом хосте. После того, как файл будет записан, он также запустит «systemctl reload iptables.service» и «systemctl status iptables». Я проверил, что pwd по крайней мере работает там, где я планировал их разместить.
Код работал нормально с одним словом вместо переменной table_entry, я смог записать что-то в файл на моем хост-компьютере с помощью другой пользователь.
Проблема в том, что в переменной table_entry будут пробелы, а команда sudo su - c получает второе слово в качестве ввода (по крайней мере, это то, что я думаю), и я получить ошибку sudo: INPUT: команда не найдена."INPUT" из моего предложения case
Я пытался поместить переменную "table_entry" в "{$ table_entry}", " формы $ table_entry "и {$ table_entry}, но они не работали.
Я удалил часть кода, чтобы сделать его более читабельным (в основном предложения для переменных и запросы имени хоста и пользователя).
#!/bin/bash
echo -e "Which ports?
1. INPUT
2. OUTPUT
3. Forward"
read opt_ch
case $opt_ch in
1) chain="INPUT" ;;
2) chain="OUTPUT" ;;
3) chain="FORWARD" ;;
*) echo -e "Wrong Option Selected!!!"
esac
table_entry="-A $chain "#-s $ip_source -d $ip_dest
ssh -t user@host "sudo table_entry=$table_entry su -c 'echo $table_entry >> /home/user/y.txt'"
#^ this line will later also include the systemctl commands separated with ";" ^
Я протестировал несколько разных методов, как сделать этот скрипт в целом, heredo c (не получал ввода, чтобы работать очень хорошо), Ansible (На самом деле мне не показалось, что это отличный инструмент для этого j ob), Python (невозможно установить новые модули в среду). Так что это лучшее решение, которое я придумал с моим ограниченным набором навыков.
Редактировать: Я также понимаю, что это, вероятно, не самый умный способ сделать этот сценарий, но это единственный способ, который мне удалось проработать так далеко , который также может запрашивать пароль у пользователя при выполнении команды su. Я не разбираюсь в безопасной передаче паролей в среде linux или в целом, поэтому я предпочитаю позволять linux обрабатывать пароли за меня.