
私はgitコマンドの自動化にplink.exeを使用していますが、これは問題なく動作します。しかし、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
。