如何编写shell脚本实现GitHub仓库自动克隆到Ubuntu且免输账号密码
Shell脚本自动完成GitHub HTTPS克隆免交互输入凭证方案
注意:GitHub已于2021年8月停止支持HTTPS克隆的账户密码认证,你需要先在GitHub个人账户设置中生成个人访问令牌(PAT),勾选repo相关权限,后续用PAT代替密码使用。
方案1:仓库URL嵌入凭证(最简单,适合临时脚本场景)
直接将用户名和PAT拼入HTTPS仓库地址即可,修改后的脚本示例:
#!/bin/bash echo AutoClone From github echo =================================================== # 替换为你的GitHub用户名、PAT、仓库地址 GITHUB_USER="你的用户名" GITHUB_PAT="你生成的个人访问令牌" REPO_URL="github.com/仓库所有者/仓库名.git" git clone "https://${GITHUB_USER}:${GITHUB_PAT}@${REPO_URL}"
注意:
- 该方案会明文存储凭证,仅适合在私密、安全的专属设备上使用
- 脚本完成后建议设置权限避免其他用户读取:
chmod 700 你的脚本名.sh
方案2:配置Git全局凭证存储(适合长期使用的固定设备)
不需要修改脚本,提前配置Git的凭证缓存规则即可,操作步骤:
- 安装凭证存储工具(部分Ubuntu版本默认自带,缺失的话执行):
apt install -y git-core - 配置全局凭证存储规则:
git config --global credential.helper store - 首次手动执行一次任意git操作(比如克隆一次公开仓库),输入用户名和PAT,凭证会自动保存在
~/.git-credentials文件中,后续所有git操作包括脚本内的克隆都会自动读取凭证,无需手动输入。
方案3:expect自动交互(适合不修改URL也不存储全局凭证的场景)
用expect工具监听命令行输出,自动匹配输入框填入对应内容,操作方法:
- 先安装expect:
apt update && apt install -y expect - 修改后的脚本示例:
#!/bin/bash echo AutoClone From github echo =================================================== GITHUB_USER="你的用户名" GITHUB_PAT="你生成的个人访问令牌" REPO_URL="https://github.com/仓库所有者/仓库名.git" expect -c " spawn git clone $REPO_URL expect \"Username for 'https://github.com':\" send \"$GITHUB_USER\r\" expect \"Password for 'https://${GITHUB_USER}@github.com':\" send \"$GITHUB_PAT\r\" interact "
方案4:使用SSH协议克隆(最安全,推荐长期使用)
提前在Ubuntu设备上生成SSH公钥,将公钥添加到GitHub账户的SSH密钥列表中,之后直接使用SSH地址克隆,不需要任何凭证输入,脚本中直接写:
git clone git@github.com:仓库所有者/仓库名.git
生成SSH密钥的命令:ssh-keygen -t ed25519 -C "你的GitHub绑定邮箱",全程回车不要设密码,然后将~/.ssh/id_ed25519.pub的内容复制到GitHub账户的SSH密钥设置中即可。
内容的提问来源于stack exchange,提问作者mester lio
相关产品推荐
相关产品推荐

