如何在Git项目中避免显示明文密码

57次阅读
没有评论

问题描述

在使用Jenkins Freestyle项目将更改推送到远程服务器时,遇到了一个问题。他们通过ssh在远程主机上执行shell脚本,使用带有Git用户名和密码的原始URL来拉取远程主机上的更改。为了避免密码在URL中以明文形式显示,他们将这些凭据存储在变量中,使用“Build Environment”中的“secret text(s) or file(s)”选项。

在Jenkins端,一切正常,使用Jenkins的其他项目的用户无法看到Git凭据,但在部署项目的远程服务器上却存在问题。远程服务器上的用户通过ssh访问项目目录,并能够在其中运行git reflog命令,从而看到明文的Git凭据。

考虑到远程服务器无法打开22端口用于GitLab,因此无法使用ssh密钥方法在Jenkins中创建构建。他们只能使用http方法来拉取更改。用户想知道是否有方法可以避免在项目目录中以明文形式显示Git凭据。

解决方案

以下解决方案中的操作可能因版本差异而有所不同。请在实施前进行备份,确保对系统的修改不会造成损失。

使用git credentials.helper特性

可以通过使用Git的credentials.helper特性来避免在项目目录中以明文形式显示Git凭据。credentials.helper允许您将凭据存储在一个安全的位置,以供Git在需要时自动使用。

以下是如何设置credentials.helper来避免明文显示Git凭据的步骤:

  1. 在远程服务器上,打开命令行终端。
  2. 运行以下命令来配置credentials.helper
    bash
    git config --global credential.helper store

    这将告诉Git在全局范围内使用store凭据助手。

  3. 接下来,运行以下命令来设置您的凭据:
    bash
    git credential-store --file ~/.git-credentials store

    该命令将提示您输入Git的用户名和密码,并将其存储在指定的文件中(在这里是~/.git-credentials)。

  4. 现在,当您在项目目录中运行Git操作时,Git将自动从~/.git-credentials中获取凭据,而不再需要在URL中明文显示它们。

请注意,虽然credentials.helper可以帮助您避免明文显示Git凭据,但它仍然需要确保存储凭据的位置是安全的,并且只有受信任的用户能够访问这些凭据文件。

使用SSH密钥方法(仅限HTTP方法不可用时)

如果您的项目使用的是HTTP方法,而SSH密钥方法在远程服务器上不可用,您可以考虑在Jenkins中使用SSH密钥方法来拉取更改。这将涉及以下步骤:

  1. 在Jenkins中,为您的项目配置SSH密钥。这通常涉及生成一个SSH密钥对,并将公钥添加到GitLab或其他托管平台上。

  2. 在Jenkins的构建配置中,使用SSH密钥来进行身份验证,而不是在URL中使用明文密码。

  3. 配置Jenkins作业,以在构建期间使用SSH密钥来进行Git操作,从而拉取更改。

通过使用SSH密钥方法,您可以避免在Git项目中显示明文密码,同时确保在远程服务器上进行安全的认证和拉取操作。

使用git credentials.helper和SSH密钥的结合方法

如果在远程服务器上无法使用HTTP方法,同时又需要避免明文显示Git凭据,您可以将上述两种方法结合使用。在Jenkins中使用SSH密钥方法进行身份验证和拉取操作,并在远程服务器上使用git credentials.helper来避免Git凭据的明文显示。

通过采用这种结合方法,您可以在保持凭据安全性的同时,实现在Jenkins中进行自动化构建和部署。

注意事项

  • 无论使用哪种方法,请确保密钥和凭据文件都得到了适当的保护,只有授权的用户能够访问它们。
  • 在实施任何更改之前,请务必备份您的系统和项目,以防出现意外情况。

请根据您的项目需求和服务器环境选择适合的方法,并确保按照最佳实践进行设置和操作,以确保安全性和效率。

正文完