4

上下文:我正在构建一个自动构建脚本,它将在 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) 在批处理/bash 脚本之间保持 SSH 登录信息有效,或者 B) 以编程方式输入密码?

4

1 回答 1

3

由于您在客户端和服务器上使用 Windows,我建议您plinkPuTTY 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
于 2013-06-26T12:20:33.350 回答