我需要编写一个脚本,可以将标签从构建服务器推送到Git服务器,但不使用SSH密钥。
由于许多人都可以访问构建服务器,因此SSH密钥无法使用,否则任何人都可以推送到Git服务器而不需要指定自己的凭据。
该脚本将在Jenkins/Hudson上运行,它会在开始构建时提示用户输入用户名和密码,然后将它们作为环境变量传递给脚本。
问题是,我找不到强制Git程序接受密码的方法。
我尝试过:
但是在这两种情况下,git仍会提示输入密码。
更新:我还尝试了一个Python脚本,重定向stdin和stdout,但没有成功,仍然会得到提示。
更新:此外,我还尝试了Windows版本的Expect,它既不在控制台中也不在Expect本身中获取提示(即Expect从未看到任何来自git的输出,最后只是超时)。
有什么建议吗?
注意:让我澄清一下,因为人们真的很在意使用SSH密钥。
要求:
由于许多人都可以访问构建服务器,因此SSH密钥无法使用,否则任何人都可以推送到Git服务器而不需要指定自己的凭据。
该脚本将在Jenkins/Hudson上运行,它会在开始构建时提示用户输入用户名和密码,然后将它们作为环境变量传递给脚本。
问题是,我找不到强制Git程序接受密码的方法。
我尝试过:
echo %password% | git push
以及
git push < tempfilewithpassword.txt (not that writing the password to a temp file is a good idea anyway).
但是在这两种情况下,git仍会提示输入密码。
更新:我还尝试了一个Python脚本,重定向stdin和stdout,但没有成功,仍然会得到提示。
更新:此外,我还尝试了Windows版本的Expect,它既不在控制台中也不在Expect本身中获取提示(即Expect从未看到任何来自git的输出,最后只是超时)。
有什么建议吗?
注意:让我澄清一下,因为人们真的很在意使用SSH密钥。
要求:
- 凭据应在构建开始时指定(Jenkins接受它们,并将它们传递给我的脚本)。
- 凭证仅在此单个构建的持续时间内有效。
- 凭据可以在一个构建到下一个构建之间更改。
ssh
)通常的方法是使用expect
。不过我不知道它在 Windows 上是否可行。 - Paŭlo Ebermann