Plink は sudo の git のコマンド ファイルでは動作しません

Plink は sudo の git のコマンド ファイルでは動作しません

私は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

関連情報