📅  最后修改于: 2023-12-03 15:28:29.259000             🧑  作者: Mango
当利用 Shell/Bash 脚本与 GitHub 交互时,我们要小心使用凭据,以避免在代码中暴露 GitHub 账户密码或访问令牌。本文将介绍一些避免使用 GitHub 凭据的方法。
如果您的 Shell/Bash 脚本包含 GitHub 凭据,那么这些凭据可能会被复制或分发到其他地方。GitHub 令牌或密码可能会被包含在提交的 Git 仓库、环境变量、日志文件或 Bash 历史记录中。一旦凭据泄漏,攻击者可以使用这些凭据来修改您的 GitHub 仓库、发布虚假代码或访问您的源代码。
为了避免直接在脚本中使用凭据,我们可以将凭据保存在环境变量中。这样做有两个好处:
以下示例演示了如何使用 Bash 脚本读取环境变量中的 GitHub 令牌,并将其传递给 curl
命令用于 GitHub API 请求:
#!/bin/bash
# 读取环境变量
GITHUB_TOKEN=$1
# 发送 API 请求
curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user/repos
使用时,可以将环境变量作为参数传递给脚本:
./github.sh 1234567890abcdefghijklm
如果您需要在多个 Git 仓库之间交换数据,我们建议您使用 SSH 密钥进行身份验证。使用 SSH 密钥与使用令牌或密码进行身份验证的主要区别在于,令牌或密码是针对一个特定的 Git 仓库或 API 请求,而 SSH 密钥是全局的身份验证方式。
以下示例演示了如何使用 SSH 密钥进行身份验证:
#!/bin/bash
# 设置 SSH 秘钥路径
SSH_PRIVATE_KEY=$HOME/.ssh/id_rsa
# 删除旧的 SSH 秘钥文件
[ -f "$SSH_PRIVATE_KEY" ] && rm -f "$SSH_PRIVATE_KEY"
# 生成新的 SSH 秘钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f "$SSH_PRIVATE_KEY"
# 清理 SSH 主机命名解析列表
ssh-keyscan -t rsa github.com > ~/.ssh/known_hosts
# 发送 Git 操作请求
git clone git@github.com:user/example-repo.git
在上面的示例中,我们首先生成了一对 SSH 密钥,然后将公钥(id_rsa.pub)添加到 GitHub 帐户的 SSH 密钥列表中。然后我们使用 Git 克隆操作请求克隆了 GitHub 仓库。在运行此示例之前,请将 user/example-repo.git
替换为实际的 GitHub 仓库 URL。
本文介绍了如何避免在 Shell/Bash 脚本中使用 GitHub 凭据。我们推荐您使用环境变量或 SSH 密钥进行身份验证,以减少凭据泄漏的风险。除此之外,您还可以使用 Keychain 或 GNOME Keyring 等钥匙环工具来安全地保存凭据。