【发布时间】:2011-05-20 13:11:49
【问题描述】:
我需要编写一个脚本,该脚本可以在不使用 SSH 密钥的情况下将标签从构建服务器推送到 git 服务器。
更多人可以访问构建服务器而不是 git 服务器,因此 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 密钥的方法都不能满足这一点(除非我要求用户在启动脚本时上传他们的 SSH 密钥,这很不方便)。
【问题讨论】:
-
忘了说,这是在windows上,所以它是一个.bat脚本。
-
我不明白为什么不能选择 SSH 密钥。 “任何人都可以作为我的用户访问 git repo”是什么意思?
-
请注意,有权访问服务器的人不仅可以作为您的用户访问 git 存储库,而且还可以访问您的密码(因为您需要将其存储在共享服务器上)。使用密码实际上会使情况更糟,以多种方式。
-
@Piskvor:我知道他不会存储密码,而是让用户按需输入。
-
除此之外,向尝试从终端读取的进程提供交互式输入的常用方法(如此处的
ssh)将是expect。不过,不知道这是否/如何在 Windows 上工作。
标签: git tags ssh hudson build-automation