上下文:我正在构建一个自动构建脚本,该脚本将在Windows服务器盒上运行(因为我们的开发软件包仅限Windows)。我的客户端盒也是Windows。它应该执行许多步骤,其中一个步骤是登录github,丢弃所有本地更改(以防万一;确实不应该有任何本地更改),获取和合并。
限制: 1)我应该能够运行一个批处理文件(或其他脚本文件,只要它在Windows框上运行) 2)我无法走到盒子里并且每次都输入我的SSH密码。它应该自动运行。
问题:我无法让Git和SSH与我的Windows批处理文件很好地配合使用。
我的第一次尝试:
:: set repo folder
CD %2
:: check status
CALL git status
ECHO.
:: discard all changes
ECHO ~ discard all changes
ECHO.
CALL git reset --hard
CALL git clean -f -d
ECHO.
:: switch branch
ECHO ~ checkout branch %4
ECHO.
CALL git checkout %4
ECHO.
:: get any changes from server
ECHO ~ fetch %3
ECHO.
CALL git fetch %3
ECHO.
:: merge changes into current branch
ECHO ~ merge %3/%4
ECHO.
CALL git merge %3/%4
ECHO.
参数%2是windows文件位置,%3是github HTTPS url,%4是分支名称。
这有效,但使用HTTPS,这意味着手动输入我的用户名和密码。
所以我尝试在SSH(通过bash)中使用命令:
eval `ssh-agent`
ssh-add /z/id_rsa
就像批次一样:
CD C:\Program Files (x86)\Git\bin\
sh.exe --login -i -c "eval `ssh-agent` && ssh-add /z/id_rsa && exit"
但是,每次我使用此命令时,SSH还要求我输入密钥密码。
我怎样才能(A)在批处理/重击脚本之间保持SSH登录信息,或者B)以编程方式输入密码?
答案 0 :(得分:3)
由于您在客户端和服务器上使用Windows,我建议您使用plink
中的PuTTY Suite进行自动化操作。
该套件还包括SSH代理(pageant
)。但是,如果私钥受密码保护,则只需要代理。出于自动化目的,我将创建一个没有密码的专用密钥对,并使用该密钥:
plink -ssh -batch -i "C:\path\to\private.ppk" user@host C:\serverpath\batch.cmd
在上面的命令中,C:\serverpath\batch.cmd
是服务器上批处理文件的位置。您还可以将要运行的命令保存在客户端上的文件中,并将其与plink
一起使用:
plink -ssh -batch -i "C:\path\to\private.ppk" -m C:\localpath\batch.cmd user@host