【问题标题】:svn encrypt/cache user password manuallysvn 手动加密/缓存用户密码
【发布时间】:2019-06-22 16:47:04
【问题描述】:

目标:从命令提示符运行 svn 命令时避免出现 svn 身份验证提示。

我知道有一个选项可以将 --username 和 --password 传递给 svn 命令。但我不想这样做,因为 svn 操作是从批处理脚本完成的,我不想将密码存储在批处理脚本中。

如果我们创建需要存在于 %APPDATA%\Subversion\auth\svn.simple\ 下的文件并更新它的内容。它是否逃脱了身份验证提示。有可能吗?

我看到有工具可以从 svn.simple 下的文件中解密密码。但是如何加密密码并创建一个具有正确哈希名称的文件,以便 svn 使用它?

【问题讨论】:

  • 如何使用集成 Windows 身份验证?见visualsvn.com/server/features/windows-auth。它启用了支持 Kerberos 和 NTLM 身份验证的 SPNEGO 协议 - 没有缓存凭据。
  • 感谢您的评论。如果我理解正确,我们必须在当前设置之外切换到 VisualSVN 服务器。我认为寻找一个小技巧(如果有的话,存在的话)来切换设置太难了。
  • 我从来没有深入研究过它是如何工作的,但我使用 TortoiseSVN 的任何默认设置,我需要做的就是检查我使用时弹出的提示中的“保存身份验证”复选框TortoiseSVN 第一次出现在给定的 repo 中。然后,命令行工具会自动使用这些凭据。
  • 是的,没错,这行得通。但我们的目标是自动化它,因为虚拟机每月重组一次,并且手动花费我们每个月为大量机器重复此活动的成本。

标签: svn tortoisesvn


【解决方案1】:

找到解决方案。下面是windows中加密的颠覆过程。

  1. Subversion 使用 Windows 的 CryptProtectData 函数来加密密码。
  2. Subversion 对加密密码进行 base64 编码并保存到 %APPDATA%\Subversion\auth\svn.simple\

尝试使用 Powershell:

使用 powershell 无法自动化,原因是 CryptProtectData 采用了包含在加密密码中的“描述”参数。但是 Powershell ProtectedData 函数不带“description”参数。

因此,如果我使用 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)

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 2011-12-22
    • 2011-08-20
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    相关资源
    最近更新 更多