
Utilizo plink.exe para automatizar los comandos de git y funciona bien. Pero necesito usar esto con servidores con inicio de sesión de sudo
plink.exe -ssh [email protected] -m commands.txt
mi archivo commands.txt, por ejemplo:
echo -e "MYPASSWORD\n" | sudo -S -i
cd /home/www/argentium.ru
git checkout HEAD~3
y la salida parece haber iniciado sesión, pero git se ejecuta como si funcionara sin iniciar sesión en sudo:
[sudo] password for argentium: fatal: Unable to create '/home/www/argentium.ru/.git/index.lock': Permission denied
Con ayuda putty.exe funciona bien
с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'.
Respuesta1
El comando sudo -S -i
lee la contraseña y los comandos de la entrada estándar.
En echo -e "MYPASSWORD\n" | sudo -S -i
la entrada estándar, la entrada es desde la tubería, que devuelve una nueva línea y luego un final de archivo después de leer la contraseña: los comandos restantes se ejecutan en el shell normal.
Hay un par de formas de solucionarlo: lo que se acerque más a lo que ha codificado es utilizar unaqui-documento:-
sudo -S -i <<EOF
MYPASSWORD
cd /home/www/argentium.ru
git checkout HEAD~3
EOF
Alternativamente, puede agregar todos los comandos al flujo de entrada: –
echo -e "MYPASSWORD\ncd /home/www/argentium.ru\ngit checkout HEAD~3" | sudo -S -i
Tenga en cuenta que he probado esto en un bash
shell normal, ya que no tengo una configuración con la que pueda probar fácilmente plink
.