目标:在命令提示符下运行svn命令时,避免使用svn身份验证提示。
我知道有一个选项可以将--username&--password传递给svn命令。但是我不想这样做,因为svn操作是从批处理脚本完成的,并且我不想在批处理脚本中存储密码。
如果我们创建文件,该文件需要存在于%APPDATA%\ Subversion \ auth \ svn.simple \下,并更新其内容。它是否转义身份验证提示。可以这样做吗?
我看到有工具可以从svn.simple下的文件中解密密码。但是,如何加密密码并创建具有正确哈希名称的文件,以便svn使用它?
答案 0 :(得分:1)
找到解决方案。以下是Windows中加密的颠覆过程。
尝试使用Powershell:
无法通过Powershell自动化,原因是CryptProtectData使用了“描述”参数,该参数包含在加密密码中。但是Powershell ProtectedData函数不使用“描述”参数。
结果,如果我使用Powershell“ ProtectedData”,则与通过Subversion进行加密相比,加密数据的大小较小。
解决方案:
因此,我使用c ++代码对来自颠覆源代码的完全相同的“描述”字符串执行了完全相同的操作,以对密码进行加密,并对加密的数据进行了base64编码,并且可以正常工作。
# Below piece is taken from svn source code - file name: subversion/libsvn_subr/win32_crypto.c
CryptProtectData(
&blobin, // Input Data BLOB
L"auth_svn.simple.wincrypt", // Description String
NULL, NULL, NULL,
CRYPTPROTECT_UI_FORBIDDEN, // Constant to avoid prompting user
&blobout // Output Data BLOB
)
注意:我将在不久的将来尝试共享代码。
其他提示
CryptProtectData函数创建一个会话密钥来执行加密。当要解密数据时,会再次导出会话密钥(关于确切的密钥及其存储方式等,我没有进一步介绍)。因此,我们必须使用计划执行svn操作的用户帐户来执行加密。
如前所述,SVN将详细信息缓存在%APPDATA%\ Subversion \ auth \ svn.simple \下,文件名为“ svn:realmstring的MD5哈希值”。
# you can find the svn realm string, if you have already cached in the your account
# Up to my observations it is <svn url> <standard text>
<https://testsvn.svn.com:443> SVN AD-LDAP login (username, lowercase with domain)