目标:从命令提示符下执行svn命令时,避免了svn认证提示。
我知道有通过--username和--password到SVN命令选项。但我不想这样做,因为SVN操作都是从批处理脚本做,我不希望存储密码的批处理脚本。
如果我们创建这就需要将在%APPDATA%\颠覆\权威性\ svn.simple \当前和更新内容的文件。它逃脱身份验证提示。是否有可能做到这一点?
我看到有工具从文件解密密码下svn.simple。但我怎么加密密码,并创建适当的哈希文件名的文件,使SVN使用它?
发现的解决方案。下面是加密Windows中的颠覆过程。
使用PowerShell尝试:
无法与自动化的powershell,其原因是它包括在所述加密的密码CryptProtectData以“描述”参数。但是PowerShell的ProtectedData功能不发生“说明”参数。
其结果是,如果我使用与由Subversion加密相比Powershell的“ProtectedData”经加密的数据的大小是小的。
解:
因此,我使用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的细节\权威性\ svn.simple \,文件名是“SVN的MD5哈希值:realmstring”。
# 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)