
Я использую plink.exe для автоматизации команд git, и это работает отлично. Но мне нужно использовать это с серверами с логином sudo
plink.exe -ssh [email protected] -m commands.txt
Например, мой файл commands.txt:
echo -e "MYPASSWORD\n" | sudo -S -i
cd /home/www/argentium.ru
git checkout HEAD~3
и вывод выглядит так, как будто вы вошли в систему, но git выполняется так, как будто он работает без входа в систему sudo:
[sudo] password for argentium: fatal: Unable to create '/home/www/argentium.ru/.git/index.lock': Permission denied
С помощью putty.exe работает нормально
сentos-7-x86_64-minimal @ 23.11.2016
-bash-4.2$ sudo -i
[sudo] password for argentium:
[root@stilnoeserebro ~]# cd /home/www/argentium.ru
[root@stilnoeserebro argentium.ru]# git checkout HEAD~3
Note: checking out 'HEAD~3'.
решение1
Команда sudo -S -i
считывает пароль и команды из стандартного ввода.
В echo -e "MYPASSWORD\n" | sudo -S -i
стандартном вводе используется канал, который возвращает новую строку, а затем конец файла после считывания пароля: остальные команды выполняются в обычной оболочке.
Есть несколько обходных путей: наиболее близким к тому, что вы закодировали, является использованиездесь-документ:-
sudo -S -i <<EOF
MYPASSWORD
cd /home/www/argentium.ru
git checkout HEAD~3
EOF
В качестве альтернативы вы можете добавить все команды во входной поток:-
echo -e "MYPASSWORD\ncd /home/www/argentium.ru\ngit checkout HEAD~3" | sudo -S -i
Обратите внимание, что я тестировал это на обычной bash
оболочке, поскольку у меня нет настроек, с помощью которых я мог бы легко протестировать это с помощью plink
.