Plink не работает с файлом команд для git в sudo

326
Eugen Gedroyc

Я использую plink.exe для автоматизации команд git, и это прекрасно работает. Но мне нужно использовать это с серверами с логином sudo

plink.exe -ssh argentium@186.118.154.164 -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

1 ответ на вопрос

1
AFH

Команда 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.

Альтернативный вариант выглядит явно. Я мог бы догадаться ... Теперь я понимаю смысл. Но первый вариант удобен. Большое спасибо! Eugen Gedroyc 5 лет назад 0

Похожие вопросы