Ваша цель - отредактировать файл в вашей виртуальной машине. Ни одна из ваших команд не выполняет ничего, кроме echo "password"
на виртуальной машине.
Что (должно) работать
Следующее не проверено. Вы хотите , чтобы sudo
запустить удаленно , считывая из сценария, что ssh
проходит через соединение через стандартный ввод. Что-то вроде
SSHPASS=password sshpass -e ssh host@192.168.122.229 \
'{ echo "password"; cat; }| sudo -Sv bash' < script.sh
cat
гарантирует, что все, что ssh
отправляет по соединению, будет прочитано sudo
, после оно считывает пароль со стандартного ввода.
Что не так
Ваша первая команда
SSHPASS=password sshpass -e ssh \
-tt \
-o "StrictHostKeyChecking no" \
host@192.168.122.229 'echo "password" |
sudo -Sv &&
bash -s' < script.sh
начинается с запуска sshpass
. Он подключается к удаленному хосту, запускает echo "password"
, а затем выходит из системы. Этот вывод передается по каналу sudo -Sv
, который, не имея команды для запуска, просто игнорирует свой ввод и успешно завершается. Затем bash
запускает код, считанный из вашего скрипта локально.
Ваша вторая команда
cat script.sh |
SSHPASS=password sshpass -e ssh -tt host@192.168.122.229 'echo "password" |
sudo -Sv &&
bash -s'
передает содержимое вашего скрипта в sshpass
, который снова входит в систему на удаленном хосте. и выполняет команду, игнорируя ваш скрипт и завершая работу. sudo
затем игнорирует ввод и успешно завершает работу, начиная bash -s
, что блокирует ожидание ввода.
Кстати, ваш сценарий может быть упрощен до
cd /etc/sysconfig/network-scripts
{
sed -e 's/BOOTPROTO="dhcp"/BOOTPROTO="static"/g' \
-e 's/NAME="ens3"/NAME="ens3:0"/g' \
-e 's/DEVICE="ens3"/DEVICE="ens3:0"/g' ifcfg-ens3
echo 'PEERDNS="yes"'
echo 'IPADDR=192.168.122.201'
echo 'NETMASK=255.255.255.0'
echo 'GATEWAY=192.168.122.1'
} > ifcfg-ens3:0
systemctl restart network
Нет sudo
(поскольку сценарий выполняется с sudo
), и одна команда sed
(чтение из исходного файла) и несколько echo
все записи в один и тот же выходной файл.